2017-08-16 304 views
3

我創建的索引不指定排序或空的姓氏/ 例如爲:如何正確地創建一個索引DESC NULLS LAST排序

CREATE INDEX index_name ON TABLE table_name (date) 

,現在我的ORDER BY DESC NULLS LAST查詢的運行極爲緩慢。

我的PostgreSQL文檔閱讀,

NULLS FIRST指定在之前那種非空值空值。這是指定DESC時的默認值 。

NULLS LAST指定空值在非空之後排序。當沒有指定DESC時,這是默認的 。

因此,如果我像這樣創建一個索引(用於COL date):

CREATE INDEX index_name ON TABLE table_name (date DESC NULLS LAST) 

我會得到的查詢嚴重的性能增益像

SELECT * FROM table_name ORDER BY date DESC NULLS LAST LIMIT 50 OFFSET 0 

+1

嘗試一下並回報。 –

回答

1

從Postgres的9.6 documentation

中的空白選擇,如果你需要支持「空值排序低」 行爲,而不是默認的「空值排序高」,在查詢該 依賴於指標是有用的避免排序步驟。

如果不提供索引查詢規劃很可能需要在返回之前的記錄,可能導致巨大的性能下降,如果表中包含足夠的記錄進行排序最後空值。