需要有关 PostgreSQL 中查询性能的帮助。它似乎与索引有关。
这个查询:
- 筛选依据
type
- 按
timestamp
,升序排列:
SELECT * FROM the_table WHERE type = 'some_type' ORDER BY timestamp LIMIT 20
索引:
CREATE INDEX the_table_timestamp_index ON the_table(timestamp);
CREATE INDEX the_table_type_index ON the_table(type);
该type
字段的值只是大约 11 个不同字符串中的一个。
问题是查询似乎在 O(log n) 时间内执行,大多数时候只需要几毫秒,除了一些type
需要几分钟才能运行的值。
在这些示例查询中,第一个查询只需要几毫秒即可运行,而第二个查询则需要 30 多分钟:
SELECT * FROM the_table WHERE type = 'goq' ORDER BY timestamp LIMIT 20
SELECT * FROM the_table WHERE type = 'csp' ORDER BY timestamp LIMIT 20
我怀疑,大约 90% 的确定性,我们拥有的索引不是正确的。我认为,在阅读了关于索引性能的类似问题之后,我们最需要的是一个复合索引,over type
and timestamp
。
我运行的查询计划在这里:
- 预期性能,特定类型索引(即,
WHERE
子句中 type = 'csq' 的新索引)。 - 最慢,有问题的情况,索引如上所述。
- 快速案例,与上述相同的索引。
非常感谢您的帮助!任何指针将不胜感激!