索引是一種特殊的文件(InnoDB數(shù)據(jù)表上的索引是表空間的一個(gè)組成部分),它們包含著對(duì)數(shù)據(jù)表里所有記錄的引用指針。 普通索引(由關(guān)鍵字KEY或INDEX定義的索引)的唯一任務(wù)是加快對(duì)數(shù)據(jù)的訪問速度。 普通索引允許被索引的數(shù)據(jù)列包含重復(fù)的值。如果能確定某個(gè)數(shù)據(jù)列將只包含彼此各不相同的值,在為這個(gè)數(shù)據(jù)列創(chuàng)建索引的時(shí)候就應(yīng)該用關(guān)鍵字UNIQUE把它定義為一個(gè)唯一索引。也就是說,唯一索引可以保證數(shù)據(jù)記錄的唯一性。 主鍵,是一種特殊的唯一索引,在一張表中只能定義一個(gè)主鍵索引,主鍵用于唯一標(biāo)識(shí)一條記錄,使用關(guān)鍵字 PRIMARY KEY 來創(chuàng)建。 索引可以覆蓋多個(gè)數(shù)據(jù)列,如像INDEX(columnA, columnB)索引,這就是聯(lián)合索引。 主鍵分為復(fù)合主鍵和聯(lián)合主鍵 復(fù)合主鍵就是指你表的主鍵含有一個(gè)以上的字段組成 。 例如; create table test ( name varchar(19), id number, value varchar(10), primary key (id,name) ) 上面的id和name字段組合起來就是你test表的復(fù)合主鍵 (若其一為單索引字段時(shí),左邊的id才會(huì)有索引) 它的出現(xiàn)是因?yàn)槟愕膎ame字段可能會(huì)出現(xiàn)重名,所以要加上ID字段這樣就可以保證你記錄的唯一性 一般情況下,主鍵的字段長(zhǎng)度和字段數(shù)目要越少越好 聯(lián)合主鍵,顧名思義就是多個(gè)主鍵聯(lián)合形成一個(gè)主鍵組合,體現(xiàn)在聯(lián)合。 (主鍵原則上是唯一的,別被唯一值所困擾。) 索引可以極大的提高數(shù)據(jù)的查詢速度,但是會(huì)降低插入、刪除、更新表的速度,因?yàn)樵趫?zhí)行這些寫操作時(shí),還要操作索引文件。 簡(jiǎn)單的例子 主鍵A跟主鍵B組成聯(lián)合主鍵 主鍵A跟主鍵B的數(shù)據(jù)可以完全相同(困擾吧,沒關(guān)系),聯(lián)合就在于主鍵A跟主鍵B形成的聯(lián)合主鍵是唯一的。 下例主鍵A數(shù)據(jù)是1,主鍵B數(shù)據(jù)也是1,聯(lián)合主鍵其實(shí)是11,這個(gè)11是唯一值,絕對(duì)不充許再出現(xiàn)11這個(gè)唯一值。(這就是多對(duì)多關(guān)系) 主鍵A數(shù)據(jù) 主鍵B數(shù)據(jù) 1 1 2 2 3 3 主鍵A與主鍵B的聯(lián)合主鍵值最多也就是 11 12 13 21 22 23 31 32 33 |
|