SQL Server 索引基礎知識(4)—-主鍵與叢集索引自蟈蟈俊.net)

來源:互聯網
上載者:User

有些人可能對主鍵和叢集索引有所混淆,其實這兩個是不同的概念,下面是一個簡單的描述。不想看繞口文字者,直接看兩者的對比表。尤其是最後一項的比較。

主鍵(PRIMARY KEY )

來自MSDN的描述:

表通常具有包含唯一標識表中每一行的值的一列或一組列。這樣的一列或多列稱為表的主鍵 (PK),用於強製表的實體完整性。在建立或修改表時,您可以通過定義 PRIMARY KEY 約束來建立主鍵。

一個表只能有一個 PRIMARY KEY 約束,並且 PRIMARY KEY 約束中的列不能接受空值。由於 PRIMARY KEY 約束可保證資料的唯一性,因此經常對識別欄位定義這種約束。

如果為表指定了 PRIMARY KEY 約束,則 SQL Server 2005 資料庫引擎 將通過為主鍵列建立唯一索引來強制資料的唯一性。當在查詢中使用主鍵時,此索引還可用來對資料進行快速存取。因此,所選的主鍵必須遵守建立唯一索引的規則。

建立主鍵時,資料庫引擎 會自動建立唯一的索引來強制實施 PRIMARY KEY 約束的唯一性要求。如果表中不存在叢集索引或未顯式指定非叢集索引,則將建立唯一的叢集索引以強制實施 PRIMARY KEY 約束。

叢集索引

叢集索引基於資料行的索引值在表內排序和儲存這些資料行。每個表只能有一個叢集索引,因為資料行本身只能按一個順序儲存。

每個表幾乎都對列定義叢集索引來實現下列功能:

  • 可用於經常使用的查詢。
  • 提供高度唯一性。

兩者的比較

下面是一個簡單的比較表

  主鍵 叢集索引
用途 強製表的實體完整性 對資料行的排序,方便查詢用
一個表多少個 一個表最多一個主鍵 一個表最多一個叢集索引
是否允許多個欄位來定義 一個主鍵可以多個欄位來定義 一個索引可以多個欄位來定義
     
是否允許 null 資料行出現 如果要建立的資料列中資料存在null,無法建立主鍵。
建立表時指定的 PRIMARY KEY 約束列隱式轉換為 NOT NULL。
沒有限制建立叢集索引的列一定必須 not null .
也就是可以列的資料是 null
參看最後一項比較
是否要求資料必須唯一 要求資料必須唯一 資料即可以唯一,也可以不唯一。看你定義這個索引的 UNIQUE 設定。
(這一點需要看後面的一個比較,雖然你的資料列可能不唯一,但是系統會替你產生一個你看不到的唯一列)
     
建立的邏輯 資料庫在建立主鍵同時,會自動建立一個唯一索引。
如果這個表之前沒有叢集索引,同時建立主鍵時候沒有強制指定使用非叢集索引,則建立主鍵時候,同時建立一個唯一的叢集索引
如果未使用 UNIQUE 屬性建立叢集索引,資料庫引擎 將向表自動添加一個四位元組 uniqueifier 列。
必要時,資料庫引擎 將向行自動添加一個 uniqueifier 值,使每個鍵唯一。此列和列值供內部使用,使用者不能查看或訪問。

參考:

下面這個文章中大力的回複:
http://topic.csdn.net/t/20021212/16/1255429.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.