2013-01-21 61 views
1

我做的,在PostgreSQL裏,這樣的事情:加快Postgres的查詢(其中2臺作品)

select A.first, 
     count(B.second) as count, 
     array_agg(A.second) as second, 
     array_agg(A.third) as third, 
     array_agg(B.kids) as kids 
from A join B on A.first=B.second 
group by A.first; 

而且它永遠走(也因爲表是相當大的)。將輸出限制爲10行,並使用解釋分析進行查看告訴我,嵌套循環很龐大,並且佔用大部分時間。

有沒有什麼辦法可以寫這個查詢(我將在CREATE TABLE AS中使用它來創建一個新表)來加速它,同時保留相同的輸出,這正是我想要的嗎?

謝謝!

+0

請發佈執行計劃(使用解釋分析)和兩個表上定義的所有索引的定義。有關性能問題的更多信息如下:http://wiki.postgresql.org/wiki/SlowQueryQuestions –

+0

原始表中沒有索引。創建其中的一些,我需要的,足以加快查詢幾個數量級。我猜我今天學到的關鍵概念是:「讓你的索引工作」。 :) – mgm

回答

1

確保作爲一個外鍵索引的列使用帶來:

create index b_second on b(second); 

沒有這樣的指數,a每一行會導致b表掃描,這將使您的查詢檢索。

+0

好多了,謝謝! (我不知道爲什麼我認爲我必須處理查詢而不是表格) – mgm