PostgreSQL中COUNT的各条件下(1亿条数据)例子

dreamers 发布于 2014/10/29 18:49
阅读 5K+
收藏 10

插入一亿条数据

(示例数据库:9.3.5)
参考资料:http://www.oschina.net/question/96003_70381

test=# insert into tbl_time1 select generate_series(1,100000000),clock_timestamp(),now();
INSERT 0 100000000
Time: 525833.218 ms
约:8.7分钟



COUNT,没有索引,1亿条数据。


test=# select count(1) from tbl_time1;
   count   
-----------
 100000000
(1 row)
Time: 3070658.058 ms
约:51.2分钟


添加主键索引耗时

test=# alter table tbl_time1 add primary key (id);
ALTER TABLE
Time: 981276.804 ms
约:16.4分钟



COUNT,有索引(主键),1亿条数据,注意 where id > 0 的条件

这个有 where id > 0
test=#  select count(id) from tbl_time1 where id > 0;
   count   
-----------
 100000000
(1 row)
Time: 244243.112 ms
约:4.071分钟



COUNT,有索引(主键),1亿条数据,注意没有 where id > 0 的条件

这个无 where id > 0
test=#  select count(id) from tbl_time1;
   count   
-----------
 100000000
(1 row)
Time: 548650.606 ms
约:9.144分钟



通过修改配置文件调优



enable_bitmapscan = off
enable_hashagg = on
enable_hashjoin = on
enable_indexscan = on
enable_indexonlyscan = on
#enable_material = on
#enable_mergejoin = on
#enable_nestloop = on
enable_seqscan = off
#enable_sort = on
enable_tidscan = off



test=# select count(id) from tbl_time1 where id > 0;
   count  
-----------
100000000
(1 row)
Time: 87501.151 ms
约:1.456分钟



加载中
0
mark35
mark35
MVCC的不带条件的count都会扫全表很慢的
dreamers
dreamers
最后一个,修改配置文件后,是 Index Only Scan的。
0
大王叫我来卖萌
大王叫我来卖萌
没办法控制在秒级吗?
dreamers
dreamers
我的测试测试机是普通PC的,以前的AMD4核,8G内存,7200转 的硬盘。不过,相信再调优下内存,我觉得应该是可以的。
0
红星xx
红星xx
pgsql count 超过几十万 都是扫全表的 ,
dreamers
dreamers
最后一个,修改配置文件后,是 Index Only Scan的。
0
reme
reme
配置文件在什么位置
0
sunday12345
sunday12345
enable_indexonlyscan =on


这个有什么不良后果么?

0
DavinciRes
DavinciRes

整一个SSD加速看看呢?


返回顶部
顶部