1. 程式人生 > >mysql中,索引,主鍵,唯一索引,聯合索引的區別

mysql中,索引,主鍵,唯一索引,聯合索引的區別

索引是一種特殊的檔案(InnoDB資料表上的索引是表空間的一個組成部分),它們包含著對資料表裡所有記錄的引用指標。
普通索引(由關鍵字KEY或INDEX定義的索引)的唯一任務是加快對資料的訪問速度。


普通索引允許被索引的資料列包含重複的值。如果能確定某個資料列將只包含彼此各不相同的值,在為這個資料列建立索引的時候就應該用關鍵字UNIQUE把它定義為一個唯一索引。也就是說,唯一索引可以保證資料記錄的唯一性。


主鍵,是一種特殊的唯一索引,在一張表中只能定義一個主鍵索引,主鍵用於唯一標識一條記錄,使用關鍵字 PRIMARY KEY 來建立。
索引可以覆蓋多個數據列,如像INDEX(columnA, columnB)索引,這就是聯合索引。


主鍵分為複合主鍵和聯合主鍵
複合主鍵就是指你表的主鍵含有一個以上的欄位組成 。
例如;
create table test 

   name varchar(19), 
   id number, 
   value varchar(10), 
   primary key (id,name) 

上面的id和name欄位組合起來就是你test表的複合主鍵 (若其一為單索引欄位時,左邊的id才會有索引)
它的出現是因為你的name欄位可能會出現重名,所以要加上ID欄位這樣就可以保證你記錄的唯一性 
一般情況下,主鍵的欄位長度和欄位數目要越少越好 




聯合主鍵,顧名思義就是多個主鍵聯合形成一個主鍵組合,體現在聯合。
(主鍵原則上是唯一的,別被唯一值所困擾。) 
索引可以極大的提高資料的查詢速度,但是會降低插入、刪除、更新表的速度,因為在執行這些寫操作時,還要操作索引檔案。


簡單的例子 
主鍵A跟主鍵B組成聯合主鍵 
主鍵A跟主鍵B的資料可以完全相同(困擾吧,沒關係),聯合就在於主鍵A跟主鍵B形成的聯合主鍵是唯一的。 
下例主鍵A資料是1,主鍵B資料也是1,聯合主鍵其實是11,這個11是唯一值,絕對不充許再出現11這個唯一值。(這就是多對多關係) 
主鍵A資料 主鍵B資料 
1      1 
2      2 
3      3 
主鍵A與主鍵B的聯合主鍵值最多也就是 
11 
12 
13 
21 
22 
23 
31 
32 
33