2012-08-08 100 views
3

夥計們,我想了解以下問題的答案:我可以擁有沒有聚集索引的主鍵嗎?我也可以擁有多值聚簇索引嗎?

  1. 我能有沒有聚集索引主鍵? (我知道當我們在列上創建主鍵約束時,默認情況下會創建一個聚集索引,那麼在這種情況下,我應該如何關閉聚集索引?)

  2. 我可以擁有一個具有多列的聚集索引一起? (就像在非集羣中,我可以爲單個非聚集索引加入不同的列)。

回答

4

(這個答案是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

2

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

相關問題