postgresql - 更改 PostgreSQL 中表行的顺序

标签 postgresql performance

我在 PostgreSQL 中有一张表。我想根据特定列(不是主键)对行数据进行物理重新排序。在我的例子中,此列类型是 date。我该怎么做?

最佳答案

如果您在该列上有索引,则 CLUSTER 命令将根据该索引对行进行物理“排序”

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”的特性,这意味着如果一个 session 开始一个 seq 扫描(select * from ...)并且另一个 session 正在做同样的事情,第二个在第一次 seq 扫描(无论在哪里)时搭载一个,然后在结果末尾添加“丢失”的行。

保证结果集顺序的唯一方法(实际上:唯一)是提供一个order by 子句。


这只有在您的服务器中有一个单个 硬盘(不是 SSD)时才有意义(至少对我而言)。在那种情况下,seq 扫描可能会更快,因为所有 block 可能都彼此相邻(这也不能保证,因为文件系统重用的方式可用空间)。

在 SSD 或使用带有许多硬盘的 RAID 阵列的适当服务器上,我看不出这有什么好处。

关于postgresql - 更改 PostgreSQL 中表行的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14175992/

相关文章:

PostgreSQL - 继续 unique_violation (plpgsql)

postgresql - 在相关表中不存在记录或在具有条件的相关表中确实存在记录时,对查询进行序列化

XML 解析性能 DOM 与 XOM

linux - MonetDB 并行查询高 IO 写入事件

javascript - 为 Javascript 优化 Gruber URL 正则表达式

java - spring data jpa 不必要的左连接

postgresql - 串行类型列值获取非连续值

delphi - 如何使用 Delphi(BDE 组件)优化更新 Postgres?

python - matplotlib savefig 性能,在循环中保存多个 png

使用 GCC vector 内在函数计算 x^y