• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PostgreSQL 创建表分区
    创建表分区步骤如下:
    1. 创建主表
    CREATE TABLE users ( uid int not null primary key, name varchar(20));
    2. 创建分区表(必须继承上面的主表)
    CREATE TABLE users_0 ( check (uid >= 0 and uid 100) ) INHERITS (users);
    CREATE TABLE users_1 ( check (uid >= 100)) INHERITS (users);
    3. 在分区表上建立索引,其实这步可以省略的哦
    CREATE INDEX users_0_uidindex on users_0(uid);
    CREATE INDEX users_1_uidindex on users_1(uid);
    4. 创建规则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);
    下面就可以测试写入数据啦:
    postgres=# INSERT INTO users VALUES (100,'smallfish');
    INSERT 0 0
    postgres=# INSERT INTO users VALUES (20,'aaaaa');
    INSERT 0 0
    postgres=# select * from users;
    uid | name
    -----+-----------
    20 | aaaaa
    100 | smallfish
    (2 笔资料列)
    postgres=# select * from users_0;
    uid | name
    -----+-------
    20 | aaaaa
    (1 笔资料列)
    postgres=# select * from users_1;
    uid | name
    -----+-----------
    100 | smallfish
    (1 笔资料列)
    到这里表分区已经可以算完了,不过还有个地方需要修改下,先看count查询把。
    postgres=# EXPLAIN SELECT count(*) FROM users where uid100;
    QUERY PLAN
    ---------------------------------------------------------------------------------------------
    Aggregate (cost=62.75..62.76 rows=1 width=0)
    -> Append (cost=6.52..60.55 rows=879 width=0)
    -> Bitmap Heap Scan on users (cost=6.52..20.18 rows=293 width=0)
    Recheck Cond: (uid 100)
    -> Bitmap Index Scan on users_pkey (cost=0.00..6.45 rows=293 width=0)
    Index Cond: (uid 100)
    -> Bitmap Heap Scan on users_0 users (cost=6.52..20.18 rows=293 width=0)
    Recheck Cond: (uid 100)
    -> Bitmap Index Scan on users_0_uidindex (cost=0.00..6.45 rows=293 width=0)
    Index Cond: (uid 100)
    -> Bitmap Heap Scan on users_1 users (cost=6.52..20.18 rows=293 width=0)
    Recheck Cond: (uid 100)
    -> Bitmap Index Scan on users_1_uidindex (cost=0.00..6.45 rows=293 width=0)
    Index Cond: (uid 100)
    (14 笔资料列)
    按照本来想法,uid小于100,理论上应该只是查询users_0表,通过EXPLAIN可以看到其他他扫描了所有分区的表。
    postgres=# SET constraint_exclusion = on;
    SET
    postgres=# EXPLAIN SELECT count(*) FROM users where uid100;
    QUERY PLAN
    ---------------------------------------------------------------------------------------------
    Aggregate (cost=41.83..41.84 rows=1 width=0)
    -> Append (cost=6.52..40.37 rows=586 width=0)
    -> Bitmap Heap Scan on users (cost=6.52..20.18 rows=293 width=0)
    Recheck Cond: (uid 100)
    -> Bitmap Index Scan on users_pkey (cost=0.00..6.45 rows=293 width=0)
    Index Cond: (uid 100)
    -> Bitmap Heap Scan on users_0 users (cost=6.52..20.18 rows=293 width=0)
    Recheck Cond: (uid 100)
    -> Bitmap Index Scan on users_0_uidindex (cost=0.00..6.45 rows=293 width=0)
    Index Cond: (uid 100)
    (10 笔资料列)
    到这里整个过程都OK啦!
    您可能感兴趣的文章:
    • PostgreSQL LIST、RANGE 表分区的实现方案
    • 浅析postgresql 数据库 TimescaleDB 修改分区时间范围
    • 利用python为PostgreSQL的表自动添加分区
    • 如何为PostgreSQL的表自动添加分区
    • 浅谈PostgreSQL 11 新特性之默认分区
    • PostgreSQL之分区表(partitioning)
    • PostgreSQL分区表(partitioning)应用实例详解
    • PostgreSQL教程(三):表的继承和分区表详解
    • 浅谈PostgreSQL表分区的三种方式
    上一篇:PostgreSQL 数据库性能提升的几个方面
    下一篇:PostgreSQL中的OID和XID 说明
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PostgreSQL 创建表分区 PostgreSQL,创建,表,分区,PostgreSQL,