是否可以在SQL Server数据库中创建一个表,其中一列是主列,另一列是聚簇索引,如下所示
create table tablename ( id int primary key , contact int clustered index)
数据的顺序是什么?
答案 0 :(得分:1)
可以创建一个表,其中一列是PK,另一列是聚簇索引,如下所示:
CREATE TABLE TableName
(ID INT NOT NULL PRIMARY KEY,
Contact INT NOT NULL UNIQUE CLUSTERED)
GO
SQL Server将自动创建主键作为非聚集索引,因为在另一列上指定了聚簇索引。
任何RDBMS都无法保证数据的顺序。
答案 1 :(得分:1)
在SQL Server中,您可以在任何可以编制索引的列上创建聚簇索引。它不必是与主键相同的列,聚簇索引也不必是唯一的列。
在SQL Server中确实没有一个真正的“数据顺序”。聚簇索引中页面的逻辑顺序保持为双向链表,其中每个数据页指向下一页和上一页。当您创建聚簇索引时,这些页面通常到磁盘上某些程度的“相邻”页面,但SQL Server不会尝试维护任何物理排序,并会拆分页面并根据需要在其他位置分配新页面。数据页中行的逻辑顺序由每个页面上的插槽数组定义 - 行按分配顺序存储,而不是页面中的集群键顺序,即使在聚簇索引中也是如此。
页面和行的逻辑顺序不一定与您在查询结果中看到的行的顺序有关。因此,对您的问题的正确答案是,当您在查询中指定ORDER BY子句时,顺序是您希望的顺序。如果未指定ORDER BY,则该顺序未定义。