深入理解四種數據庫索引類型(- 唯一索引/非唯一索引 - 主鍵索引(主索引) - 聚集索引/非聚集索引 - 組合索引)

  • 唯一索引/非唯一索引
  • 主鍵索引(主索引)
  • 聚集索引/非聚集索引
  • 組合索引

唯一索引/非唯一索引

唯一索引

1.唯一索引是在表上一個或者多個字段組合建立的索引,這個或者這些字段的值組合起來在表中不可以重復。

非唯一索引

2.非唯一索引是在表上一個或者多個字段組合建立的索引,這個或者這些字段的值組合起來在表中可以重復,不要求唯一。

主鍵索引(主索引)

3.主鍵索引(主索引)是唯一索引的特定類型。表中創建主鍵時自動創建的索引 。一個表只能建立一個主索引。

聚集索引/非聚集索引

4.聚集索引(聚簇索引),表中記錄的物理順序與鍵值的索引順序相同。一個表只能有一個聚集索引。

擴展:聚集索引和非聚集索引的區別?分別在什么情況下使用?

聚集索引和非聚集索引的根本區別是表中記錄的物理順序和索引的排列順序是否一致。

聚集索引的表中記錄的物理順序與索引的排列順序一致

優點是查詢速度快,因為一旦具有第一個索引值的記錄被找到,具有連續索引值的記錄也一定物理的緊跟其后。

缺點是對表進行修改速度較慢,這是為了保持表中的記錄的物理順序與索引的順序一致,而把記錄插入到數據頁的相應位置,必須在數據頁中進行數據重排,降低了執行速度。在插入新記錄時數據文件為了維持 B+Tree 的特性而頻繁的分裂調整,十分低效。

建議使用聚集索引的場合為:
A.某列包含了小數目的不同值。
B.排序和范圍查找。

非聚集索引的記錄的物理順序和索引的順序不一致

其他方面的區別:
1.聚集索引和非聚集索引都采用了 B+樹的結構,但非聚集索引的葉子層并不與實際的數據頁相重疊,而采用葉子層包含一個指向表中的記錄在數據頁中的指針的方式。聚集索引的葉節點就是數據節點,而非聚集索引的葉節點仍然是索引節點。

2.非聚集索引添加記錄時,不會引起數據順序的重組。

看上去聚簇索引的效率明顯要低于非聚簇索引, 因為每次使用輔助索引檢索都要經過兩次 B+樹查找, 這不是多此一舉嗎? 聚簇索引的優勢在哪?

1.由于行數據和葉子節點存儲在一起, 這樣主鍵和行數據是一起被載入內存的, 找到葉子節點就可以立刻將行數據返回了, 如果按照主鍵 Id 來組織數據, 獲得數據更快。

2.輔助索引使用主鍵作為"指針", 而不是使用地址值作為指針的好處是, 減少了當出現行移動或者數據頁分裂時,輔助索引的維護工作, InnoDB 在移動行時無須更新輔助索引中的這個"指針"。 也就是說行的位置會隨著數據庫里數據的修改而發生變化, 使用聚簇索引就可以保證不管這個主鍵 B+樹的節點如何變化, 輔助索引樹都不受影響。

建議使用非聚集索引的場合為:
a.此列包含了大數目的不同值;
b.頻繁更新的列

5.組合索引(聯合索引)

基于多個字段而創建的索引就稱為組合索引。

創建索引
create index idx1 on table1(col1,col2,col3)
查詢
select * from table1 where col1= A and col2= B and col3 = C

組合索引查詢的各種場景
組合索引 Index (A, B, C)

下面條件可以用上該組合索引查詢:
? A>5
? A=5 AND B>6
? A=5 AND B=6 AND C=7
? A=5 AND B=6 AND C IN (2, 3)

下面條件將不能用上組合索引查詢:
? B>5 ——查詢條件不包含組合索引首列字段
? B=6 AND C=7 ——理由同上

下面條件將能用上部分組合索引查詢(重要! ! ! ! ) :
? A>5 AND B=2 ——當范圍查詢使用第一列, 查詢條件僅僅能使
用第一列
? A=5 AND B>6 AND C=2 ——范圍查詢使用第二列, 查詢條件僅僅能使用
前二列
? A=5 AND B IN (2, 3) AND C=2 ——理由同上

組合索引排序的各種場景:

茲有組合索引 Index(A,B)。
? 下面條件可以用上組合索引排序:
? ORDER BY A——首列排序
? A=5 ORDER BY B——第一列過濾后第二列排序
? ORDER BY A DESC, B DESC——注意, 此時兩列以相同順序排序
? A>5 ORDER BY A——數據檢索和排序都在第一列

下面條件不能用上組合索引排序:
? ORDER BY B ——排序在索引的第二列
? A>5 ORDER BY B ——范圍查詢在第一列, 排序在第二列
? A IN(1,2) ORDER BY B ——理由同上
? ORDER BY A ASC, B DESC ——注意, 此時兩列以不同順序排序

alter table users add index lname_fname_age(lname,fname,age);

創建了 lname_fname_age 多列索引,相當于創建了(lname)單列索引,
(lname,fname)聯合索引以及(lname,fname,age)聯合索引。

舉例說明:上面給出一個多列索引(username,password,last_login),當
三 列 在 where 中 出 現 的 順 序 如 (username,password,last_login) 、
(username,password)、(username)才能用到索引,如下面幾個順序
(password,last_login) 、 (passwrod) 、 (last_login)--- 這 三 者 不 從
username 開始,(username,last_login)---斷層,少了 password,都無
法利用到索引。因為 B+tree 多列索引保存的順序是按照索引創建的順序,
檢索索引時按照此順序檢索。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容