2017-05-05 59 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命令。