0
我有一個超過100000行的表,我想按字母順序使用姓和名排序。我想通過使用索引來實現排序。我試過這個:使用索引在Postgresql中按字母排序。
CREATE INDEX idx0 ON "People"(surname,name DESC NULLS LAST);
但是表沒有正確排序。我究竟做錯了什麼?
我有一個超過100000行的表,我想按字母順序使用姓和名排序。我想通過使用索引來實現排序。我試過這個:使用索引在Postgresql中按字母排序。
CREATE INDEX idx0 ON "People"(surname,name DESC NULLS LAST);
但是表沒有正確排序。我究竟做錯了什麼?
如果你想在這個以選擇從表中的數據,你應該執行一個查詢:
SELECT * FROM People ORDER BY surname, name DESC NULLS LAST
這個查詢將跑得快,因爲數據庫會使用,而不是在飛行中對數據進行排序指數(注意,只有當查詢的ORDER BY的列和排序方向與索引的列和排序方向完全匹配時才起作用)。
如果你想身體重新排序表中的數據,則可以執行:
CLUSTER People USING idx0
但是請記住,CLUSTER
命令只會重新排序現有數據。如果您將新數據插入到表中,則不會按照所需的順序進行放置,因此您必須再次執行CLUSTER
命令。
索引將加速搜索和排序。但是,它不會重新排序物理表。即,你仍然需要添加一個ORDER BY條款。 – jarlh
表格代表*無序*集合。如果你想以特定的順序得到結果,你需要在查詢中使用'order by'。 –
你在尋找'CLUSTER'命令嗎?請記住它是一次性操作 - 稍後的行將再次退出 –