2015-06-30 127 views
2

我有一個約1000萬行的表和一個日期字段上的索引表。當我嘗試提取索引字段的唯一值時,即使結果集只有26個項目,Postgres仍會運行順序掃描。爲什麼優化器選擇這個計劃?我能做些什麼避免它?Postgres是一個執行順序掃描,而不是索引掃描

explain select "labelDate" from pages group by "labelDate"; 
           QUERY PLAN 
----------------------------------------------------------------------- 
HashAggregate (cost=524616.78..524617.04 rows=26 width=4) 
    Group Key: "labelDate" 
    -> Seq Scan on pages (cost=0.00..499082.42 rows=10213742 width=4) 
(3 rows) 
+0

您的統計數據是最新的嗎? –

+0

是的,我運行分析完整和重新索引 –

+1

我想你會有更好的機會在http://dba.stackexchange.com/ –

回答

1

我覺得這裏的問題是,查詢規劃要讀取整個表,因爲你即使你不使用任何聚合函數GROUP BY條款。因此它看起來類似於"Why is count(*) so slow"的問題,您可以在問題中以多種形式找到它。

在你的情況下,查詢有點奇怪。您的問題通過以下簡單查詢得到解答:

SELECT DISTINCT "labelDate" FROM pages; 
+0

這不會更快。由於不使用COUNT,因此不需要掃描。 –

相關問題