2017-05-05 47 views
0

我有一個超過100000行的表,我想按字母順序使用姓和名排序。我想通過使用索引來實現排序。我試過這個:使用索引在Postgresql中按字母排序。

CREATE INDEX idx0 ON "People"(surname,name DESC NULLS LAST); 

但是表沒有正確排序。我究竟做錯了什麼?

+1

索引將加速搜索和排序。但是,它不會重新排序物理表。即,你仍然需要添加一個ORDER BY條款。 – jarlh

+1

表格代表*無序*集合。如果你想以特定的順序得到結果,你需要在查詢中使用'order by'。 –

+0

你在尋找'CLUSTER'命令嗎?請記住它是一次性操作 - 稍後的行將再次退出 –

回答

0

如果你想在這個以選擇從表中的數據,你應該執行一個查詢:

SELECT * FROM People ORDER BY surname, name DESC NULLS LAST 

這個查詢將跑得快,因爲數據庫會使用,而不是在飛行中對數據進行排序指數(注意,只有當查詢的ORDER BY的列和排序方向與索引的列和排序方向完全匹配時才起作用)。

如果你想身體重新排序表中的數據,則可以執行:

CLUSTER People USING idx0 

但是請記住,CLUSTER命令只會重新排序現有數據。如果您將新數據插入到表中,則不會按照所需的順序進行放置,因此您必須再次執行CLUSTER命令。