我们有一个从主从简单模式中检索一些数据的查询。 WHERE 子句如下所示:
-- These are just random numbers
Where ticket.type_id in ( 2, 3, 4, 5, 7 ) and
(
ticket.color_id is null or
ticket.color_id in ( 1, 2 , 8 )
)
我们已经在列中有了索引:ticket.type_id 和 ticket.color_id,无论如何,QUERY EXPLAIN ANALYZE 仍然向我们表明 Postgresql 正在进行顺序扫描以满足查询。
这个查询非常重要并且在系统中经常出现,所以我们想专门为这个案例创建一个索引。
什么索引可以解决这个问题?
最佳答案
首先,检查索引是否真的能为您提供帮助。在调用查询之前关闭序列扫描以强制使用索引:
SET ENABLE_SEQSCAN TO OFF;
查询运行后:
SET ENABLE_SEQSCAN TO ON;
重新启用序列扫描。如果这表明没有性能改进,则 Postgres 已经选择了正确的执行计划(顺序扫描)。我会运行 explain analyze <query>
对于打开和关闭序列扫描的整个查询。
你有没有运行 vacuum analyze
在相关表格上?规划器可能没有您的查询的正确或当前统计信息。
关于database - 为 postgres 查询设计索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10905319/