什麼是唯一索引和唯一鍵之間之探源?唯一索引或唯一鍵?
回答
的獨特的作品是不是其中的區別所在。索引和關鍵不是一回事,也沒有可比性。
的關鍵是一個數據列或幾列中,被強制爲唯一與一個約束,無論是主鍵或明確拒絕唯一約束。而索引是用於存儲數據位置的結構,以便更快地檢索。
從文檔:
創建表或 視圖唯一索引。唯一索引是其中 兩行被允許具有相同 索引鍵值。集羣 索引視圖上的必須是唯一的
您可以使用UNIQUE約束,使 確保沒有重複的值是 在做 特定的列中輸入不參與主鍵。 雖然兩者的唯一約束和 PRIMARY KEY約束強制 唯一性,當你想強制 唯一一列或多列的組合 使用唯一約束 而不是PRIMARY KEY約束 的,這不是主要的 鑰匙。
這MSDN article comparing the two is what you're after。術語是這樣的,「約束」是ANSI,但在SQL Server中,您不能禁用唯一約束...
對於大多數用途,沒有區別 - 約束被實現爲封面下的索引。 MSDN文章備份這個向上 - 的差在所述元數據,對於像:
- 的調整FILLFACTOR
- INCLUDE提供更有效的覆蓋索引(複合約束)
- 篩選索引是象對行子集的約束/忽略多個空值等。
「唯一鍵」是一個重言式。密鑰(AKA「候選密鑰」)是數據庫的邏輯特徵 - 強制實施表中一組屬性的唯一性的約束。
索引是一種物理級別特性,旨在以某種方式優化性能。索引有很多種類。
唯一密鑰:這是一個限制數據庫的限制。這個限制是不允許重複的值。例如,如果你想選擇一個列作爲主鍵應該是NOT NULL &獨一無二的。
唯一索引:它是一個在您的數據庫上執行查詢時提高性能的索引。在唯一索引中,它也不允許索引中的重複值。即沒有兩行將具有相同的索引鍵值。
關鍵字(又名關鍵字)和索引都是錶行的標識符。
儘管索引是平行標識結構,包含指向已標識行的指針,而鍵是原位字段成員。
作爲標識符的關鍵在於唯一性(約束)和NOT NULL(約束)。 NULL作爲標識符沒有意義(因爲null無法識別任何內容)以及非唯一標識值。
非聚集索引可以包含實際數據,而不是用作標識符真實數據等是不唯一的[1]
不幸做法是,鍵或索引(標識符)被約束稱爲(規則或限制)以前的答案是什麼。
鍵是在上下文中使用:
- 備用又名次級又名候選鍵,可以是多個
- 複合鍵(幾個字段的組合)
- 主鍵(超密鑰),天然或替代關鍵的,只有一個,真正用於參照完整性
- 外鍵
外鍵處於關鍵其他表(它是主鍵),甚至不是他們經常提到的鍵。這種使用是通過將「外鍵約束」術語的簡寫混淆爲「外鍵」來解釋的。
主鍵約束確實意味着NOT NULL和UNIQUE約束+被引用的列(或組合列)是標識符,並且不幸被「主鍵」或「主鍵約束」替代,但它們都不能被只有(主鍵)約束或僅由(主鍵)。
更新:
我相關的問題:
[1]
UNIQUE argument for INDEX creation - what's for?
- 1. '唯一'的唯一密鑰或索引
- 2. 唯一索引與非唯一索引
- 3. 多列唯一索引鍵
- 4. 唯一約束vs唯一索引
- 5. 唯一索引在INFORMATION_SCHEMA不是唯一
- 6. Oracle唯一約束和唯一索引
- 7. 唯一鍵與SQL Server 2008上的唯一索引
- 8. SQL唯一索引
- 9. SQL:唯一索引
- 10. 唯一索引4
- 11. Pymongo:insert_many +唯一索引
- 12. 創建唯一節點或創建唯一索引
- 13. 將非唯一索引更改爲唯一索引
- 14. 每個外鍵的唯一索引
- 15. 非唯一索引中的外鍵? (oracle)
- 16. MySQL的唯一鍵和索引
- 17. Sql Server唯一鍵也是索引嗎?
- 18. Sybase唯一索引和主鍵
- 19. InnoDB的唯一鍵和索引
- 20. 多索引中的多個唯一鍵
- 21. FuelPHP中的唯一鍵/索引
- 22. 創建唯一的索引 - 重複鍵
- 23. 集羣或唯一索引MySql DB?
- 24. mysql唯一索引除空或空
- 25. 重寫唯一索引值
- 26. 雙字段唯一索引
- 27. MySQL唯一索引錯誤?
- 28. postgresql - pk與唯一索引
- 29. MySQL唯一索引設計
- 30. Postgres:部分唯一索引
「約束來作爲幕後的指數」 - 絕對的權利,就不可能有效地執行無論如何沒有索引。 – DaveBoltman 2015-08-03 12:59:18