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 uid<100;
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 uid<100;
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啦!



相关阅读:
基于jQuery实现的向下滑动二级菜单效果代码
js删除Array数组中指定元素的两种方法
再谈Javascript中的异步以及如何异步
C#定义并实现单链表实例解析
C#数据绑定控件中的DataSource属性浅谈
Windows8网络配置出错导致不能上网如何重新启用以太网
js实现下拉框选择要显示图片的方法
Jquery读取URL参数小例子
Mac硬盘数据找回技巧解决资料读取不了问题
Thinkphp和onethink实现微信支付插件
Linux下安装使用Mutt邮件客户端并配置邮件警报功能
C#中GraphicsPath的AddString方法用法实例
Win10系统在应用商店安装软件时提示错误代码0x80070005的解决方法
C++检查某个文件或目录是否存在的函数
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 竞职演讲:副处长竞职报告 供应商大会欢迎晚宴主持人串词 2015年教育工会工作思路 倡议书作文700字 三英战吕布600字 2015学习三严三实心得体会 给学校的建议书作文700字 致我最好的朋友——王悦作文1000字 梧桐,牵动我的情丝 只做自己懂的事 李开复人才观 烟花,绽放作文350字 市人民医院集体先进事迹申报材料 《功夫熊猫》影片评论作文400字 有关我的父亲的作文:我的父亲 2016党支部党员承诺书 市旅游产业发展实施意见 心中的足印作文1200字 抓源头促清廉征文 2006年中考小说阅读备考资料 胸外科护士述职报告 怦然心动的一刻作文1100字 小学六年级作文600字:读鲁滨逊漂流记有感 都市拾荒者 一个人的那场"地老天荒" 其实,我一直在等你! 出国留学计划书 初中初一作文300字:朗诵比赛 母亲,感谢一路有你 马云发年终奖 农机监理个人工作总结-个人工作总结 观电影《上学路上》有感500字 汪曾祺散文《故乡人》原文 播撒激情奉献,传承恩来文化 受伤了,别哭 潜意识与潜规则 小学六年级作文550字:三清山一游 他在笑,如此温暖过一生 思念一个朋友 “词王争霸”真好玩作文 1200字除夕来历作文:古老习俗 歇后语 以公民的名义 学习江泽民执政党建设思想座谈会发言摘要 昔日阳光下 有关秋的语句-关于描写秋天的经典语句 石缝中的小生命作文500字 有了自己的窝 县廉租住房保障工作汇报材料 2016计生幸福家庭建设方案

Copyright © 2016 phpStudy |