我可以拥有没有聚集索引的主键吗?我也可以有多值聚簇索引吗?

时间:2012-08-08 12:41:47

标签: mysql sql sql-server clustered-index

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

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

  2. 我可以将多列的聚簇索引放在一起吗? (就像在非群集中,我可以为单个非聚集索引连接不同的列)。

2 个答案:

答案 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 TABLECREATE INDEX

答案 1 :(得分:2)

MySQLSQL-SERVER是不同的RDBMS。它们具有不同的功能和不同的语法。

使用InnoDB时,MySQL总是使PK成为聚集索引。

但是,

SQL-SERVER会让您在没有CLUSTERED关键字的情况下创建PK,并允许您在其他索引中使用它。

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