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