数据库服务器是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)"
可以参考下帮助文档:https://help.aliyun.com/document_detail/26092.html?spm=5176.7920951.603188.1.Dl6LHB 是不是有你需要的内容
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。