postgreSQL表分区使用方法

分区的意思是把逻辑上的一个大表分割成物理上的几块。分区可以提供若干好处:

1 提高查询性能。

   原因如下:

    ① 通过创建分区,索引所占的空间减少,因此可以将高使用率的索引放入内存中,减少因磁盘读写索引造成的开销;

    ② 可以将表中访问率较高的行存放到单独分区或少数几个分区上,极大提升查询性能;

   ③ 通过创建分区,在查询或更新时,只需扫描数据所在的那个分区上的数据即可,避免整表扫描及使用索引离散的访问整个表造成的开销,提升性能;

   ④ 提升更新和删除数据的性能:

          ALTER TABLE比操作大量的数据要快的多。它同时还可以避免由于大量DELETE导致的VACUUM超载。那么可以通过直接读取或删除那个分区以获得巨大的性能提升

2 节约存储设备成本

  通过创建分区,可以将很少使用的数据存储到慢速存储介质上


前提条件:
表分区的优势 通常只有在表可能会变得非常大的情况下才有价值。 多大的表会从分区中收益取决于具体的应用,但通常情况下,在表的大小 超过了数据库服务器的物理内存大小时需要进行表分区

3 postgresql的表分区技术
目前,  PostgreSQL支持通过表继承进行分区。每个分区必须做为单独一个父表的子表进行创建。父表自身通常是空的,它的存在只是为了代表整个数据集。

具体来讲,PostgreSQL可以实现下面形式的分区:

① 范围分区(按行分区)

     表被一个或者多个关键字段分区成"范围",这些范围在不同的分区里没有重叠。比如,我们可以为特定的商业对象根据数据范围分区,或者根据标识符范围分区。

② 列表分区(按列分区)

     明确地列出每个分区里应该出现那些关键字值实现。


4 postgresql的表分区操作流程

    要设置一个分区的表,做下面的步骤: 

  • 创建"主表",所有分区都从它继承。这个表中没有数据,不要在这个表上定义任何检查约束,除非你希望约束同样也适用于所有分区。同样,在其上定义任何索引或者唯一约束也没有意义。
  • 创建几个"子表",每个都从主表上继承。通常,这些表不会增加任何字段。我们将把子表称作分区,尽管它们就是普通的PostgreSQL表。
  • 给分区表增加约束,定义每个分区允许的健值。
5 示例
① 创建主表  
CREATE TABLE users ( uid int not null primary key, name varchar(20));  
② 创建分区表(必须继承上面的主表)  
CREATE TABLE users_0 ( check (uid >= 0 and uid< 100) ) INHERITS (users);  
CREATE TABLE users_1 ( check (uid >= 100)) INHERITS (users);  
③ 在分区表上建立索引,其实这步可以省略的哦  
CREATE INDEX users_0_uidindex on users_0(uid);  
CREATE INDEX users_1_uidindex on users_1(uid);  
④ 创建规则RULE  
CREATE RULE users_insert_0 AS  
ON INSERT TO users WHERE  
(uid >= 0 and uid < 100)  
DO INSTEAD  
INSERT INTO users_0 VALUES (NEW.uid,NEW.name);  
CREATE RULE users_insert_1 AS  
ON INSERT TO users WHERE  
(uid >= 100)  
DO INSTEAD  
INSERT INTO users_1 VALUES (NEW.uid,NEW.name);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值