Share via


唯一索引設計指導方針

唯一索引可保證索引鍵不包含重複值,因此資料表中的每一個資料列在某方面來說是唯一的。只有當資料具有唯一的特性時,指定唯一索引才有意義。例如,若要確定 HumanResources.Employee 資料表中 NationalIDNumber 資料行的值是唯一的,則當主索引鍵是 EmployeeID 時,請在 NationalIDNumber 資料行上建立 UNIQUE 條件約束。如果使用者試著在該資料行上為不止一位員工輸入相同值,便會顯示錯誤訊息,而且無法輸入重複值。

利用多重資料行唯一索引,此索引可保證索引鍵的每一個值組合都是唯一的。例如,若在 LastNameFirstNameMiddleName 資料行的組合上建立唯一索引,則該資料表中不得有兩個資料列具有這些資料行的相同值組合。

叢集與非叢集索引都可以是唯一的。假設資料行中的資料是唯一的,您就可以在同一個資料表上建立一個唯一的叢集索引和多個唯一的非叢集索引。

唯一索引的好處包括:

  • 確保所定義之資料行的資料完整性。

  • 提供對查詢最佳化工具有幫助的其他資訊。

建立 PRIMARY KEY 或 UNIQUE 條件約束時,會自動在指定的資料行上建立唯一索引。建立 UNIQUE 條件約束和不使用條件約束而建立唯一索引,兩者之間並沒有顯著的差異。資料驗證的方式相同,且查詢最佳化工具不會區分唯一索引是由條件約束所建立還是手動建立的。不過,當您的目標是資料完整性時,就應該在資料行上建立 UNIQUE 或 PRIMARY KEY 條件約束。如此一來,索引的目標就很明確。

考量因素

  • 如果資料中已存在重複的索引鍵值,則無法建立唯一索引、UNIQUE 條件約束或 PRIMARY KEY 條件約束。

  • 如果資料是唯一的,而且您想要強制唯一性,則在相同資料行組合上建立唯一索引而不是非唯一索引,可提供其他資訊給查詢最佳化工具,來產生更有效率的執行計畫。在這種情況下,建議您建立唯一索引 (而且最好先經由建立 UNIQUE 條件約束)。

  • 唯一非叢集索引可有內含的非索引鍵之索引資料行。如需詳細資訊,請參閱<具有內含資料行的索引>。

索引選項

當您建立唯一索引時,可指定數個索引選項。您應該特別考慮下列選項:

  • IGNORE_DUP_KEY

  • ONLINE

如需詳細資訊,請參閱<設定索引選項>。