2013-10-21 85 views
3

我明白什麼是主鍵和唯一集羣索引我的問題是爲什麼我們在定義唯一集羣索引時需要主鍵。只考慮性能好的數據庫設計。SQL Server中主鍵(集羣)和集羣唯一索引之間的區別

按我的理解,當我們定義一個聚集唯一索引它的數據物理排序和被需要的表的性能,它是無形的,我們是否定義主鍵或不

+1

差異:簡而言之,一個是主鍵,另一個不是。 – geomagas

+1

**主鍵**是一個**邏輯**結構 - 用於唯一可靠地識別表中每一列的鍵。 **聚集索引**是SQL Server如何處理其存儲的**物理**實現細節。 –

回答

4

「爲什麼需要主鍵當我們定義唯一聚集索引時「

它不是。

默認情況下,當您在SQL Server中使用主鍵聲明表時,它會在主鍵上添加聚簇索引(如果不指定單獨的聚簇索引)。

但是,聚集索引不必位於構成表的主鍵的列上。

您可以創建一個表,其中主鍵具有唯一的非聚集索引,聚簇索引位於其他位置。

+0

...並且您可以擁有一個沒有任何聚集索引的表格。確實叫做 –

+0

- 稱爲堆。 –

5

就SQL Server而言,在不可空列和PK上的唯一索引沒有實際區別。

兩者都強制唯一性,可以是羣集或非羣集,並可以通過外鍵約束引用。

雖然有些工具可能會期望定義一個主鍵。

關於你指出的聚集索引「物理排序數據」,這有點誤解。

這隻有在CI具有零碎片時才爲真。例如,頁面拆分後,聚集索引頁面在文件中出現亂序是完全可能的。

+0

是海報的要求嗎? –

+1

@MitchWheat - 標題似乎表明如此, –