2013-01-05 93 views
2

我在PostgreSQL中有一个表。我想根据特定的列(不是主键)对行进行重新排序。在我的情况下,这种列类型是date。可能吗?更改表格行的顺序postgres

+0

选择数据时使用'order by'。 –

+0

我想更新表格本身,它如何帮助我? –

+0

是的,你是对的。但是,最后会显示一些命令,通常不会改变。我想改变外观。 –

回答

-1

你试过“ORDER BY”吗?例如,“SELECT * FROM table_name ORDER BY date ASC;”?如果您想按相反顺序排列日期,则可以尝试“DESC”而不是“ASC”。

3

如果你对此列的索引,那么CLUSTER命令将物理根据该指数

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

请注意,此“令”是不会自动保存,你“为了”行需要手动定期运行该语句。


然而,这将保证检索行时,任何特定的顺序。即使不涉及任何联接或聚合时。

即使您所做的只是select * from the_table,仍然无法保证行返回的顺序。例如:Postgres有一个名为“同步seq扫描”的功能,这意味着如果一个会话启动一个seq扫描(select * from ...),而另一个会话正在做同样的事情,第二个会在第一个seq扫描上捎带那就是),然后在结果的末尾添加“错过”的行。

,以保证结果集的顺序唯一办法(真:在唯一)是提供一个order by条款。


时才有意义(至少对我来说),如果你在你的服务器上硬盘(这是一个SSD)。在这种情况下,seq扫描可能是会更快,因为所有块可能彼此相邻(由于文件系统重新使用空闲空间的方式而无法保证)。

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

+0

这是不是在未来版本的postgres路线图上的某处?其他一些db允许用户对索引表进行聚簇,这对于行顺序最重要的时间查询甚至更有用。 – jangorecki

+0

@jangorecki:我不知道有这样的改变。考虑到任何严重的数据库服务器都会使用很多硬盘(可能有数百个硬盘),我仍然不认为这真的很有用 - 在这种情况下,如何定义“订单”?无论如何,SSD上的随机存取没有任何开销 –