2011-03-29 93 views
2

您好我在postgresql中执行sql时遇到了一个问题。“订购”sql中的性能下降

我有这样一个类似的查询:从myTable的ORDER BY A,B

选择A,B,低级(C);

无ORDER BY子句,我在11毫秒内得到结果,但按顺序排列,花了4分多钟才找回相同的结果。

这些列包含大量数据(1000000或更多)并且有大量重复数据 任何人都可以提出我的解决方案吗?

谢谢

+0

通常,由于ORDER BY需要对结果进行排序,所以速度较慢。有些东西(如索引)可能会有所帮助。你究竟用ORDER BY来达到什么目的? – NPE 2011-03-29 12:00:54

回答

3

但按顺序,花了4分多钟才找回相同的结果。

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

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

当对不适合work_mem设置的较大结果集进行排序时,PostgreSQL采取缓慢的基于磁盘的排序。如果你允许它使用更多的内存,它会进行快速的内存排序。

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

1

你试过把一个指数A,B?

这应该加快速度。

0

你是否尝试使用DISTINCT消除重复?这应该比通过声明的订单更有效率。

+1

但是DISTINCT不一定会对结果进行排序 – 2011-03-29 12:01:39