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

问题描述:

伙计们,我想了解以下问题的答案:我可以拥有没有聚集索引的主键吗?我也可以拥有多值聚簇索引吗?

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

  2. 我可以拥有一个具有多列的聚集索引一起? (就像在非集群中,我可以为单个非聚集索引加入不同的列)。

(这个答案是SQL Server 2005+而已。我什么都不知道关于MySQL)


我能有没有聚集索引主键?

是的。正如您所提到的,默认情况下,主键约束由聚簇索引支持。你可以告诉SQL服务器通过声明约束与非聚集索引背约束如下:

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

+0

完美回答我的问题,我可以咀嚼/消化的方式。非常感谢你:) :)干杯 – Learner 2012-08-08 17:09:32

+0

@Divine:不客气! – 2012-08-08 17:13:18

+0

在乔恩,:)干杯 – Learner 2012-08-08 17:14:42

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

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

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

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

+1

另外,InnoDB的始终,即使你没有一个主键聚集索引。 – Vatev 2012-08-08 12:49:32

+0

@Dems:嗨Dems,谢谢你的回答。道歉,我duno什么是InnoDB,我是新手,对于愚蠢的问题感到抱歉。而且,如何在没有Clluetersted索引的情况下创建PK?我的意思是,如果我只是创建一个带有语法的表格,并提及主键,或者使用GUI工具创建表格,我只需将我需要的列作为主键。我真的很新:(希望你明白我究竟是什么背后:(我需要知道实现它的具体方式) – Learner 2012-08-08 12:52:00

+2

声明SQL-SERVER ...可以让你创建没有CLUSTERED关键字的PK,并让您可以在另一个索引内使用它。'不正确 - 省略'CLUSTERED'关键字将默认创建一个聚集索引。你必须使用'NONCLUSTERED'关键字。 – 2012-08-08 16:58:42