PostgreSQL 分区表怎么解析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
MYSQL 在分区表上的缺失不同,POSTGRESQL 的分区表那算是“硬可”。PG11 已经推出了HASH 分区。具体操作是怎样
首先分区表的大致用途有那些
1 在符合业务的基础上,能对合理的预设的查询提高查询的速度
2 在符合业务的基础上,能对数据的插入降低热点块的竞争,提高插入速度
3 在某些场合合理的访问分区可能顺序的扫描分区内的数据比使用分区内的索引更能提高数据访问的性能。
4 合理的设置分区,会更方便处理无用的数据,统一将一个分区内的数据进行处理。
目前 POSTGRESQL 支持的分区方式有
1 Range Partitiioning
2 List Partitioning
3 Hash Partitioning
与ORACLE 差不多的是,每个分区也是可以有自己的子分区的索引,默认值,或者一些其他定义。
另外一件事情是分区这个事情是需要有预先的设计的,而不是在系统的数据库表已经运行了好长一段时间后,在去做分区表。所以在系统设计之初就做好设计工作是重要的。
下面我们就来做点什么
1 HASH Partitioning 这是在 PG 11 中的新功能 ,通过HASH partitioning 可以加速数据的插入,这也是ORACLE DBA 引以为豪的傲娇点。
下面建立一个HASH分区表,这里已BIGINT 为主键,插入的主键除以10后余数来选择记录的落点。
后面直接插入20万数据不到1 秒就完成了
我们来看看插入的数据,基本上都打散了。
查询也是没有问题,走了主键的索引
而清除一个分区表的数据也很简单,直接删除那个表就可以了
如果想继续恢复那个分区也是很容易的事情
当然如果你想保留数据分区表的部分数据,但又不想他成为分区表中的一员也很简单。
同时PostgreSQL 也同样支持range 分区的类型,通过range 类型的分区可以根据已经设计好的日期,或者其他表中的行数据进行划分,进行分区表存储。
废话不说,建立相关的表和分区表
在建立日期类型的分区表中,要注意到to 是不包含后面指定的时间段,如果设置成 from ('2008-01-01') to ('2008-12-31') 下一个range 设置成 from ('2019-01-01') to ('2019-12-31') 则在插入数据的时候会报
no partition of relation found for row
的问题。
另一个问题是,建立分区表的时候(Postgresql 不建议建立主键,这样会引起以后必要的麻烦,如果需要可以建立唯一索引)
创建一个存储过程来进行数据的插入,看看分区表是否有问题
create or replace procedure insert_data()
language plpgsql
as $$
declare
date_value timestamp;
declare id int;
begin
date_value := '2007-01-01 00:00:00'::timestamp + '1 hour';
id = 1;
while id < 400000 loop
insert into range_test (password,insert_date) (select id::char(48),date_value::timestamp);
id = id + 1;
date_value := date_value::timestamp + '1 hour';
end loop;
end;
$$;
通过图中的两条语句来进行数据的验证,没有问题。
根据查询的要求我们还可以建立相关的分区索引
当然如果全表查询,也可以走全局的索引
看完上述内容,你们掌握PostgreSQL 分区表怎么解析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。