伙计们,我想了解以下问题的答案:
我可以有一个没有聚集索引的主键吗?(我知道当我们在列上创建主键约束时,默认情况下会创建一个聚集索引。那么在这种情况下,我应该如何停用聚集索引?)
我可以有一个包含多个列的聚集索引吗?(就像在非聚集中我可以为单个非聚集索引加入不同的列)。
伙计们,我想了解以下问题的答案:
我可以有一个没有聚集索引的主键吗?(我知道当我们在列上创建主键约束时,默认情况下会创建一个聚集索引。那么在这种情况下,我应该如何停用聚集索引?)
我可以有一个包含多个列的聚集索引吗?(就像在非聚集中我可以为单个非聚集索引加入不同的列)。
(此答案仅适用于 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
MySQL
并且SQL-SERVER
是不同的 RDBMS。它们具有不同的功能和不同的语法。
使用 InnoDB 时,MySQL
始终使 PK 成为聚集索引。
SQL-SERVER
但是,将允许您创建一个没有CLUSTERED
关键字的 PK,并让您在另一个索引中使用它。
在这两种情况下,PrimaryKeys 和 Indexes(无论是否聚集)都可以覆盖多个字段。