2008-12-14 93 views
50

我在表格中有一列(例如用戶名),我想確保它是唯一的。因此,我爲該列創建了一個唯一的鍵,並將其稱爲IX_Users_UserName。Sql Server唯一鍵也是索引嗎?

現在,如果我根據用戶名進行大量搜索用戶,我想確保該字段有一個索引。

我需要創建一個單獨的索引,還是唯一的鍵也被視爲索引,就像主鍵是一個聚集的唯一鍵?

+2

我覺得有必要指出一個主鍵不是自動聚集的唯一鍵。您的聚簇索引不需要位於主鍵上。 – 2010-07-21 19:23:01

+0

另請參閱http://stackoverflow.com/questions/564895/what-is-the-difference-between-unique-key-and-index-with-isunique-yes – 2011-09-20 19:06:52

回答

37

唯一密鑰:唯一鍵強制 獨特性上,他們 定義之列。唯一密鑰在該列上創建一個非聚集索引 。 唯一鍵只允許一個NULL值。

alter table來唯一約束 添加到列:

ALTER TABLE作者補充約束 IX_Authors_Name UNIQUE(名稱)從MSDN GO

Source

更多信息。如果你的約束沒有創建索引,我會避免將它命名爲IX_,因爲通常假定它與一個(IX =索引)相關聯。

1

唯一的關鍵是我懷疑幾乎每一個數據庫產品的索引。它必須是,否則數據庫將很難實施它:當你插入一個值時,數據庫必須回答「這個值是否已經存在?」理智的方法是諮詢索引。

我沒有在我面前測試的SQL Server,但如果沒有,我會感到震驚。

20

基本上,在SQL Server中,唯一的約束確實是通過唯一索引實現的。

UNIQUE約束和UNIQUE INDEX之間的差異非常微妙,真的。如果你創建了一個UNIQUE INDEX,你可以在另一個表的外鍵約束中引用它(如果你創建了一個UNIQUE約束,則不起作用....)。

那有什麼區別?那麼 - 一個唯一的約束在表格中更是一個合乎邏輯的事情 - 您想要表達給定列(或列組)的內容是唯一的意圖。

獨特的索引(像大多數索引)更像是一個「幕後」實現細節。

從我的角度來看,除非您真的有問題,否則我總是使用UNIQUE INDEX - 作爲參照完整性約束的一部分的好處非常有效,在某些情況下可能非常有用。在功能上,實際上,真正使用唯一約束與唯一索引沒有區別。