更改PostgreSQL中表行的顺序

时间:2013-01-05 20:19:05

标签: postgresql performance

我在PostgreSQL中有一个表。我想根据特定列(不是主键)物理地重新排序行数据。就我而言,此列类型为date。我该怎么办?

2 个答案:

答案 0 :(得分:9)

如果您在该列上有索引,则CLUSTER命令将在物理上" order"根据该索引的行

CLUSTER [VERBOSE] table_name [ USING index_name ]

http://www.postgresql.org/docs/current/static/sql-cluster.html

请注意这个"命令"不会自动维护,您需要手动定期运行该语句。

会在检索行时保证任何特定顺序。即使没有涉及联接或聚合也不行。

即使您所做的只是select * from the_table,仍然无法保证返回行的顺序。例如:Postgres有一个名为" synchronized seq scan"的功能,这意味着如果一个会话启动seq扫描(select * from ...)而另一个会话正在执行相同的操作,则第二个会话回到第一个seq扫描(在哪里),然后添加"错过"结果末尾的行。

方式来保证结果集的顺序(实际上:)是提供order by子句。

如果您的服务器中有硬盘(不是 SSD),这只对我有意义(至少对我而言)。在这种情况下,seq扫描可能更快,因为所有块可能彼此相邻(由于文件系统重新设置的方式,因此无法保证) - 使用自由空间)。

在使用具有许多硬盘的RAID阵列的SSD或适当的服务器上,我无法看到这对任何方式都有益。

答案 1 :(得分:-1)

你有没有试过" ORDER BY"?例如," SELECT * FROM table_name ORDER BY date ASC;"?如果您想要相反的日期,您可以尝试" DESC"而不是" ASC"。

相关问题