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 交通频道 作文范文 兖州-泰康 重庆北-甘泉北 西武匠-东坡 慈利-运城 张维屯-沈阳北 宁东-明光 绥中-九三 葫芦岛-莱西 太平川-沙城 太原-达州 南充-焦作 怀仁-轩岗 随州-南平南 曲靖-灵石 内江南-彝良南 汉口-槐荫 兰陵北-烟台 青县-文登 金州-梅河口 丰城-遵义 全州南-吉安 烟台-太原 溆浦南-龙游 烟台-汨罗 龙爪沟-石城 沈阳北-海口 阳平关-安阳 沂水-长沙 南召-涿州 济源-沁阳 松树镇-白山市 贵溪-四平 乌鲁木齐南-临河 瓦房店-到保 醴陵东-缙云西 鹤壁-铁岭 石家庄北-芦家庄 运城-当阳 芷江-泰安 灵宝西-杭州东 任丘-西安 老莱-图强 碧江-南朗 唐山-锦州 古田-任丘 松江-井冈山 五原-青铜峡 金刚沱-荣昌 威舍-红果 麻城-威海 绵阳-焦作 洛阳-浠水 龙游-醴陵 南京-黄山 涿州-周口 银浪-巨宝 帽儿山-乌鲁布铁 延吉-沈阳 界首市-淮南 齐齐哈尔-敦化 梁平-钟祥 余姚北-武汉 佳木斯-汾阳 陇县-内乡 长春-牛庄 平顶山西-玉屏 孝南-孝西 衡阳-兰考 红安西-大英东 沈阳北-信阳东 镇江南-滨海北 三门峡南-上饶 鹰潭-德州 加南-青水山 清河城-义乌 米脂-汾阳 烟筒屯-沟帮子 乐清-宁德 邓家湾-小儿坪 开原-日照 到陕西宝鸡旅游,有什么地方值的一去
鄂尔多斯驾照科三没及格 什么时候才能补考
从江苏常州到广东汕头要多少小时
我今年25岁,是胶州市农村户口,每年交100元交齐15年,到60岁
珠海斗门到广州南站
郑开公交从开封到郑州新东站的车都些地方有
大家好请问从九江火车站如何坐公交车到浔阳大市场
自驾车从河南平顶山到贵州贵阳怎样走路程最短,最经济越详细越好
现在去厦门鼓浪屿玩需要多少钱?
祖国的历史
谁知道河南郑州到青岛的最快的列车火车多厂时间
柳州到广州的列车火车问题
想买一台联想Z470A-IFI,不知道到长沙哪里购买比较好怕买到
2594次火车在杭州始发是城战还是东站
我想问一下..开窗帘店难吗..要自己到外面拉生意还是?
中国有几个省?
德邦物流货运从江苏昆山至东莞的专线是什么
精伊霍铁路修好后从乌鲁木齐做列车火车能到伊梨吗
从湖北武汉到福建泉州列车火车票要多少
从临平到杭州城站火车站高铁的班次及时间
从宿州到临沂的汽车客车多少钱几点钟发车 急
湖州市经济开发区凤凰西区新竹路137号该乘几路公交车
有没有淄博到郑州的物流公司
北京列车站到朝阳区东坝乡西北门怎么走
绍兴到西安怎么去,大概要多少小时,费用是多少
哈尔滨到海口飞机票,我要最低票价钱数
邯郸到合阳怎么坐车
从贵阳列车站怎么到贵阳龙洞堡国际机场?
跪求从淄川长途客车站坐几路车或步行能到附近的建行啊
桂林到兰州的航班票价多少钱

Copyright © 2016 phpStudy |