开发者社区> 问答> 正文

postgresql性能优化问题

数据库服务器是centos6.7,8G,4核,postgresql版本8.4,postgresql.conf 文件已修改,配置如下:

fsync:off

shared_buffers:2G

work_mem:10MB

effective_cache_size:6G

maintenance_work_mem:512MB

checkpoint_segments:32

checkpoint_completion_target:0.9

wal_buffer:8MB

commit_delay:10

commit_siblings:4

现在数据库中有一个表table1,需要从其中查询数据,表字段有id,field1,field2,field3等。id类型为 character varing(50),已建索引。这3个字段( id,field1,field2)的索引也已创建。

语句如下:

select id,field1,field2,count(1) as cnt from table1 where id='id_num' group by id,field1,field2

表中数据175W。按照不同的id,数据量少的大概几十,多的70W,当查询只有几十的ID时,查询是通过id索引,速度很快,当数据量多时,走了全表扫描,需要30S左右。这个应该怎么优化?

explain看到的如下:
"HashAggregate (cost=89759.79..89804.11 rows=3545 width=20)"
" -> Seq Scan on table1 (cost=0.00..83348.77 rows=641102 width=20)"
" Filter: ((id)::text = 'test143'::text)"

set enable_bitmapscan = on;
set enable_indexscan = off;
设置后,看到的是这样:
"HashAggregate (cost=92872.95..92917.26 rows=3545 width=20)"
" -> Seq Scan on table1 (cost=0.00..86461.93 rows=641102 width=20)"
" Filter: (((id)::text = 'test143'::text)"

展开
收起
李察德泰森 2017-03-23 12:16:11 3408 0
1 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
云栖大会:开源 PolarDB 架构演进、关键技术与社区建设 立即下载
2023云栖大会:和客户一起玩转PolarDB新特性 立即下载
2023云栖大会:PolarDB for AI 立即下载