Jua*_*oto 7 sql postgresql indexing performance
需要有关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);
Run Code Online (Sandbox Code Playgroud)
该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
Run Code Online (Sandbox Code Playgroud)
我怀疑,大约90%的确定性,我们拥有的索引不是正确的.我认为,在阅读了关于索引性能的类似问题之后,我们最需要的是一个综合索引,over type
和timestamp
.
我运行的查询计划在这里:
非常感谢您的帮助!任何指针都会非常感激!
索引既可以用于子句where
,也可以用于order by
子句。使用索引thetable(type, timestamp)
,则可以将相同的索引用于两者。
我的猜测是 Postgres 根据它收集的统计数据决定使用哪个索引。当它使用索引作为 where 然后尝试排序时,性能会非常糟糕。
这只是一个猜测,但值得创建上述索引来看看是否可以解决性能问题。
归档时间: |
|
查看次数: |
149 次 |
最近记录: |