f.a*_*uri 10 postgresql performance
我在PostgreSQL中有一个表.我想根据特定列(不是主键)物理地重新排序行数据.在我的情况下,此列类型是date
.我该怎么做?
a_h*_*ame 13
如果您在该列上有索引,那么该CLUSTER
命令将根据该索引对这些行进行物理"排序"
CLUSTER [VERBOSE] table_name [ USING index_name ]
Run Code Online (Sandbox Code Playgroud)
http://www.postgresql.org/docs/current/static/sql-cluster.html
请注意,此"订单"不会自动维护,您需要手动定期运行该"语句".
但是,这将在检索行时不保证任何特定顺序.即使没有涉及联接或聚合也不行.
即使您所做的只是select * from the_table
返回行的顺序仍然无法保证.例如:Postgres有一个名为"synchronized seq scan"的功能,这意味着如果一个会话启动seq scan(select * from ...
)而另一个会话正在执行相同的操作,则第二个会话在第一个seq扫描中捎带(在那里is)然后在结果的末尾添加"遗漏"行.
在只有这样,才能保证结果集的顺序(真:该只)是提供一个order by
条款.
这仅是有道理的(至少对我来说),如果你有一个单一的服务器硬盘(这是不是一个SSD).在这种情况下,seq扫描可能会更快,因为所有块可能正好相邻(由于文件系统重新使用可用空间的方式,因此无法保证).
在使用具有许多硬盘的RAID阵列的SSD或适当的服务器上,我无法看到这对任何方式都有益.
edl*_*lee -4
您尝试过“ORDER BY”吗?例如,“SELECT * FROM table_name ORDER BY date ASC;”?如果您希望日期按相反顺序排列,可以尝试“DESC”而不是“ASC”。
归档时间: |
|
查看次数: |
6040 次 |
最近记录: |