1. 程式人生 > >關係資料庫中主鍵與唯一索引的區別

關係資料庫中主鍵與唯一索引的區別

兩者在可空、唯一性、排序等表面特徵上並沒有什麼區別,而且主鍵都有唯一索引,所以常被人問起它們之間有什麼區別。簡要地說,主鍵和唯一索引,或者鍵和索引之間的最主要區別在於:鍵是一個邏輯層面的概念,涉及到資料模式的設計。從語法角度看,鍵被定義為一種約束。比方說,如果想定義外來鍵(或稱參考約束),那麼相關列就必須先定義為“鍵”。鍵在實現上一般都會有自己的索引(主鍵則是有唯一索引),這個索引可能是使用者顯式定義的索引,或是DBMS隱式定義的索引。在具體的DBMS實現中,主鍵可能會有其它特殊處理。比如在MySQL InnoDB中,表資料在檔案(表空間中)中是按主鍵順序儲存的,所以主鍵的選擇有特殊的講究,不能僅將其作為一個普通的唯一索引看待。
索引是一個物理層面的概念,涉及到資料處理的具體實現。比方說,如果想加快某些查詢的速度,就需要在相關列上定義合適的索引。鍵列必有索引,但索引列未必是鍵。不是鍵的索引列是不能用在外來鍵定義中的。