我具有以下表格结构
id name
--------------
10991 Shoug
10990 Moneera
10989 Abc
10988 xyz
id
是主键列,如您所见,id是按降序排列的(即:select * from users
以此顺序返回记录),原因是插入数据的方式不同。
如何永久地以主键的升序重新排序表?最好单独使用SQL?
我找到了this answer,但它对我不起作用。我正在使用Postgres作为数据库。
答案 0 :(得分:2)
如何永久地以主键的升序重新排序表?
您缺少有关关系数据库的基本概念。在SQL中,表表示无序集。没有“永久”排序。唯一的排序由查询中的order by
子句提供。
某些数据库支持称为“集群” /“集群索引”的概念。这意味着数据页上的数据实际上是根据某些键排序的。在这些数据库中,即使在使用带有聚集索引的表时,仍然不能保证以任何特定顺序返回数据。除非您使用ORDER BY
。
Postgres不支持此功能,因此甚至不可用。
答案 1 :(得分:0)
显然在Postgres中是不可能的。
很好奇您的用例是什么。我正在研究在Postgres中将UUID用作PK的任何缺点,这使我进入了您的帖子。由于pg不会根据PK在物理上对数据重新排序,因此我得出结论,只有大小(与传统序列相比)会有所不同。我更习惯于SQL Server创建群集索引并默认对数据重新排序。
正如您在OP中的链接所建议的那样,您可以强制其重新排序,但它不是持久性的。 Postgres还具有CLUSTER命令来执行此操作。不过,这确实可以锁定您的桌子。