2011-03-29 40 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