關係數據庫中主鍵與唯一索引的區別

兩者在可空、唯一性、排序等表面特徵上並沒有什麼區別,而且主鍵都有唯一索引,所以常被人問起它們之間有什麼區別。簡要地說,主鍵和唯一索引,或者鍵和索引之間的最主要區別在於:

鍵是一個邏輯層面的概念,涉及到數據模式的設計。從語法角度看,鍵被定義爲一種約束。比方說,如果想定義外鍵(或稱參考約束),那麼相關列就必須先定義爲“鍵”。鍵在實現上一般都會有自己的索引(主鍵則是有唯一索引),這個索引可能是用戶顯式定義的索引,或是DBMS隱式定義的索引。在具體的DBMS實現中,主鍵可能會有其它特殊處理。比如在MySQL InnoDB中,表數據在文件(表空間中)中是按主鍵順序存儲的,所以主鍵的選擇有特殊的講究,不能僅將其作爲一個普通的唯一索引看待。

索引是一個物理層面的概念,涉及到數據處理的具體實現。比方說,如果想加快某些查詢的速度,就需要在相關列上定義合適的索引。鍵列必有索引,但索引列未必是鍵。不是鍵的索引列是不能用在外鍵定義中的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章