4

伙计们,我想了解以下问题的答案:

  1. 我可以有一个没有聚集索引的主键吗?(我知道当我们在列上创建主键约束时,默认情况下会创建一个聚集索引。那么在这种情况下,我应该如何停用聚集索引?)

  2. 我可以有一个包含多个列的聚集索引吗?(就像在非聚集中我可以为单个非聚集索引加入不同的列)。

4

2 回答 2

7

(此答案仅适用于 SQL Server 2005+。我对 MySQL 一无所知。)


我可以有一个没有聚集索引的主键吗?

是的。正如您所提到的,默认情况下,主键约束由聚集索引支持。您可以通过如下声明约束来告诉 SQL Server 使用非聚集索引来支持约束:

ALTER TABLE MyTable
    ADD CONSTRAINT PK_MyTable
        PRIMARY KEY NONCLUSTERED(Col1);

我可以有一个包含多个列的聚集索引吗?(就像在非聚集中我可以为单个非聚集索引加入不同的列)。

是的,您可以在索引键中定义具有多于一列的索引。它实际上与非聚集索引没有什么不同。

CREATE UNIQUE CLUSTERED INDEX IX_MyTable_Clus
    ON MyTable(Col1, Col2, Col3);

参考文献:ALTER TABLE,CREATE INDEX

于 2012-08-08T16:56:28.757 回答
2

MySQL并且SQL-SERVER是不同的 RDBMS。它们具有不同的功能和不同的语法。

使用 InnoDB 时,MySQL始终使 PK 成为聚集索引。

SQL-SERVER但是,将允许您创建一个没有CLUSTERED关键字的 PK,并让您在另一个索引中使用它。

在这两种情况下,PrimaryKeys 和 Indexes(无论是否聚集)都可以覆盖多个字段。

于 2012-08-08T12:46:26.977 回答