“排序依据”sql中性能下降

时间:2011-03-29 11:54:49

标签: postgresql

您在postgresql中执行sql时遇到一个问题。

我有类似的查询:

从myTable ORDER BY A,B选择A,B,lower(C);

没有ORDER BY子句,我在11毫秒内得到结果,但是按顺序,检索相同结果需要4分钟以上。

这些列包含大量数据(1000000或更多),并且包含大量重复数据 谁能建议我解决?

谢谢

3 个答案:

答案 0 :(得分:3)

  

但是按顺序排序,检索相同结果需要4分钟以上。

udo已经解释了如何使用索引加速排序,这可能就是你想要的方式。

但另一种解决方案(可能)是增加work_mem变量。除非您同时运行许多查询,否则这几乎总是有益的。

当排序大型结果集(不适合您的work_mem设置)时,PostgreSQL会转向基于磁盘的慢速排序。如果你允许它使用更多的内存,它将会快速进行内存中的排序。

NB!每当您询问有关PostgreSQL性能的问题时,您应该发布查询的EXPLAIN ANALYZE输出,以及Postgres的版本。

答案 1 :(得分:1)

您是否尝试过在A,B上添加索引?

这应该可以加快速度。

答案 2 :(得分:0)

您是否尝试使用DISTINCT消除重复项?这应该比按语句排序更有效。