1

是否可以在 SQL Server 数据库中创建一个表,其中一列是主列,另一列具有聚集索引,如下所示

create table tablename ( id int primary key , contact int clustered index)

数据的顺序是什么?

4

2 回答 2

1

在 SQL Server 中,您可以在任何可以索引的列上创建聚集索引。它不必是与主键相同的列,聚集索引也不必是唯一的。

在 SQL Server 中确实没有一种真正的“数据顺序”。聚集索引中页面的逻辑顺序被维护为一个双向链表,其中每个数据页都指向下一页和上一页。当您创建聚集索引时,这些页面通常在某种程度上是磁盘上的“相邻”页面,但 SQL Server 不会尝试维护任何物理顺序,而是会拆分页面并根据需要在其他地方分配新页面。数据页中行的逻辑顺序由每个页上的槽数组定义 - 行是按分配顺序存储的,而不是页内的集群键顺序,即使在聚集索引中也是如此。

但是,这些页面和行的逻辑顺序不一定与您在查询结果中看到的行顺序有关。因此,对您的问题的正确答案是,当您在查询中指定 ORDER BY 子句时,顺序就是您想要的任何顺序。如果您未指定 ORDER BY,则该订单未定义。

于 2013-10-24T11:11:12.167 回答
1

可以创建一个表,其中一列是 PK,另一列有聚集索引,如下所示:

CREATE TABLE TableName
(ID INT NOT NULL PRIMARY KEY,
Contact INT NOT NULL UNIQUE CLUSTERED)
GO

SQL Server 将自动创建一个主键作为非聚集索引,因为在另一列上指定了聚集索引。

在任何 RDBMS 中,数据的顺序都无法保证。

于 2013-10-24T10:54:16.233 回答