我有一个简单的选择查询:
SELECT * FROM entities WHERE entity_type_id = 1 ORDER BY entity_id
然后我想得到前 100 个结果,所以我用这个:
SELECT * FROM entities WHERE entity_type_id = 1 ORDER BY entity_id LIMIT 100
问题是第二个查询比第一个查询慢得多。执行第一个查询不到一秒,执行第二个查询则超过一分钟。
这些是查询的执行计划:
无限制:
Sort (cost=26201.43..26231.42 rows=11994 width=72)
Sort Key: entity_id
-> Index Scan using entity_type_id_idx on entities (cost=0.00..24895.34 rows=11994 width=72)
Index Cond: (entity_type_id = 1)
有限制:
Limit (cost=0.00..8134.39 rows=100 width=72)
-> Index Scan using xpkentities on entities (cost=0.00..975638.85 rows=11994 width=72)
Filter: (entity_type_id = 1)
我不明白为什么这两个计划如此不同,为什么性能下降这么多。我应该如何调整第二个查询以使其更快地工作?
我使用 PostgreSql 9.2。