2012-12-27 33 views
1

我只是執行下面的腳本困惑:爲什麼SSMS創建一個主鍵的默認羣集索引與

CREATE TABLE Test 
(
    ID INT IDENTITY PRIMARY KEY, 
    Info nvarchar(50) 
) 

對於我驚訝的是身份,SSMS創建的ID列一個聚集索引。所以,我的問題是爲什麼不是非聚集索引?

根據我的理解,在這種情況下最好使用非聚集索引,因爲由於二叉樹的緣故,使用X的值查找ID而不是使用聚集索引要快得多索引值在哪裏分組。另外,如果我考慮接收數據,必須以某種方式快速訪問ID。正如在大量文章中所寫,二叉樹是禁止接收特定或多個ID的方式。除此之外,我發現在大多數情況下,任何表的主鍵都是帶有自動增量值的ID。所以使用這種自動增量原理的方法很常見。

那麼,使用非羣集密鑰的優點是什麼,爲什麼SSMS中這是默認的?

+4

聚簇索引**是**你所嚷嚷的二叉樹... –

回答

3

默認情況下,表的主鍵由聚簇索引支持 - 這只是SQL Server的默認行爲。它是可以改變的,如果需要的話:

CREATE TABLE Test 
(
    ID INT IDENTITY PRIMARY KEY NONCLUSTERED, 
    Info nvarchar(50) 
) 

,但尤其是在INT IDENTITY情況下,這幾乎你能想象你的桌子上完美的聚集索引 - 所以這是一個「好東西」的SQL Server使這個默認選擇。

SQL Server中的每個「嚴重」表都應該有一個精心挑選的聚簇索引(因爲替代方案 - 堆更慢,更精細地調整每個方面) - 以及一個小的(4個字節),靜態(永遠不會更改),像INT IDENTITY這樣的唯一列非常適合作爲此表上的聚簇索引。

如果您想了解更多關於如何明智地選擇聚集鍵,以及爲什麼它這樣做是如此重要,你應該檢查出的一切金佰利特里普必須在話題說:

相關問題