Sql-Server-2014
我應該對非 PK 唯一標識符使用索引還是唯一鍵?
使用 Sql Server 2014,我有幾個表,其中 PK 欄位是一個 int,但我也有一個我需要查詢的 UniqueIdentifier 欄位。該欄位將始終是唯一的。
我正在為這些添加索引,並且可以選擇
Index
或Unique Key
。選擇其中一個有什麼好處嗎?
唯一鍵是索引。如果保證您的值是唯一的,那麼這是最佳選擇。
唯一鍵:唯一鍵強制在其上定義它們的列的唯一性。Unique Key 在列上創建一個非聚集索引。Unique Key 只允許一個 NULL 值。
這裡有幾件事還沒有提到。
首先,UNIQUE 約束也可以用於參照完整性。根據關於唯一約束和檢查約束的 BOL 文章:
FOREIGN KEY 約束可以引用 UNIQUE 約束。
這可能對您的數據庫設計有所幫助,具體取決於您希望獲得的複雜程度,但更重要的是,正如Grant Fritchey 解釋的那樣,如果您確實在其上創建了 FOREIGN KEY 約束,它還可以幫助提高某些類型查詢的性能。
其次,這可能是更重要的事實,即使索引定義完全相同,UNIQUE 約束也可能是與其非唯一等效項的較小索引。當非聚集索引被定義為 UNIQUE 時,聚集鍵被隱式儲存為(一個)INCLUDE 列(因為非聚集索引必須指向聚集鍵)。或者,如果非聚集索引未定義為 UNIQUE,則聚集鍵隱式附加到非聚集索引鍵並將存在於索引的所有級別(使其更大)。Kalen Delaney 在她關於非聚集索引鍵和更多關於非聚集索引鍵的文章中解釋了為什麼會出現這種情況,做得更好。