我在Postgres数据库的SELECT查询速度方面遇到了一些问题。
我的表格有两个整数列作为关键字:(int1,int2) 这个表格大约有7000万行数据。
我需要在这个环境中进行两种简单的SELECT查询:
SELECT * FROM table WHERE int1=X;
SELECT * FROM table WHERE int2=X;
这两个选择器从 7 千万行中各返回约 1 万行。为了让它尽可能快地工作,我考虑使用两个哈希索引,一个针对每列。不幸的是,结果并不那么好:
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------
Bitmap Heap Scan on lec_sim (cost=232.21..25054.38 rows=6565 width=36) (actual time=14.759..23339.545 rows=7871 loops=1)
Recheck Cond: (lec2_id = 11782)
-> Bitmap Index Scan on lec_sim_lec2_hash_ind (cost=0.00..230.56 rows=6565 width=0) (actual time=13.495..13.495 rows=7871 loops=1)
Index Cond: (lec2_id = 11782)
Total runtime: 23342.534 ms
(5 rows)
这是一个 EXPLAIN ANALYZE 示例查询。它需要大约 23 秒。我的期望是在不到一秒的时间内获取此信息。
以下是 postgres 数据库配置的一些参数:
work_mem = 128MB
shared_buffers = 2GB
maintenance_work_mem = 512MB
fsync = off
synchronous_commit = off
effective_cache_size = 4GB
任何帮助、评论或想法都将不胜感激。提前感谢您。
CLUSTER
。然而,PostgreSQL 9.2增加了一项称为仅索引扫描的功能,对于这里特别有帮助 - 对感兴趣的所有列创建一个btree
索引(PostgreSQL自动保持有序),查询可以(可能)仅使用索引回答,不需要额外的搜索。 - willglynn