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