我有一个相当复杂的查询,其中包括一个
现在,我认为问题在于按主键排序的查询执行索引扫描,而按浮点列排序的查询执行顺序扫描并需要在最后进行排序。
我认为只需在浮点列上添加索引即可让Postgresql以更智能的方式规划此查询。但显然我错了。我可能漏掉了什么?
编辑:在发布问题之前,我确实运行了
ORDER BY
和一个LIMIT
子句。当ORDER BY
使用主键时,查询只需要不到5毫秒的时间。然而,如果我改变查询,使ORDER BY
由不同类型(FLOAT
)的列进行排序,则响应时间会增加到50秒以上(高出四个数量级!)。现在,我认为问题在于按主键排序的查询执行索引扫描,而按浮点列排序的查询执行顺序扫描并需要在最后进行排序。
我认为只需在浮点列上添加索引即可让Postgresql以更智能的方式规划此查询。但显然我错了。我可能漏掉了什么?
编辑:在发布问题之前,我确实运行了
EXPLAIN ANALYZE
。因此,我的推断不仅仅是一种猜测;但是,由于EXPLAIN ANALYZE
的输出超过30行,不清楚为什么一个查询使用索引而另一个查询必须对所有行进行排序。
EXPLAIN (ANALYZE, BUFFERS)
。 - vyegorov