2021-08-09 MySQL索引原理

,索引概念

數(shù)據(jù)庫(kù)索引,是數(shù)據(jù)庫(kù)管理系統(tǒng)中的一個(gè)排序數(shù)據(jù)結(jié)構(gòu),用于協(xié)助快速查詢、修改數(shù)據(jù)。

索引分類

正常索引、唯一索引、聯(lián)合索引、主鍵索引(not Null)、全文索引;

索引存儲(chǔ)模型推演

二分查找 -- 有序數(shù)組(不適合插入,刪除)、單鏈表(不適合查找)--> 二叉查找樹(shù)(極端情況退化成鏈表) -- > 平衡二叉查找樹(shù)(AVL 樹(shù))[存儲(chǔ)I/O次數(shù)較多的問(wèn)題] --多路平衡樹(shù)(B 樹(shù))[無(wú)法解決區(qū)間值的問(wèn)題] --> B+樹(shù)

  • AVL樹(shù)通過(guò)左右旋的方式來(lái)保證左右子樹(shù)的深度差的絕對(duì)值 < 1.[圖片上傳失敗...(image-8725e3-1628519986464)]
    AVL 樹(shù).png

    B 樹(shù).png

    B+ 樹(shù).png

小點(diǎn):

  • B+ 樹(shù)和B 樹(shù) 通過(guò)分裂、合并保證樹(shù)的平衡

  • 紅黑樹(shù)一般用于內(nèi)存

  • 用戶無(wú)法自行創(chuàng)建Hash索引,hash索引是InnoDB 為熱點(diǎn)數(shù)據(jù)(5/8buffer pool)自行創(chuàng)建的內(nèi)存索引。

B+樹(shù)的落地形式

B+ 樹(shù)的優(yōu)勢(shì).png

MyISAM

MyISAM-主鍵索引.png

InnoDB

InnoDB-主鍵索引.png

InnoDB-二級(jí)索引.png

問(wèn)題:為什么二級(jí)索引不存儲(chǔ)數(shù)據(jù)的訪問(wèn)地址?

當(dāng)添加 、刪除數(shù)據(jù)會(huì)引起地址變化,索引二級(jí)索引存儲(chǔ)的是主鍵值(不變的數(shù)據(jù))

小點(diǎn):

聚集索引:主鍵索引、不包含空值的唯一索引、沒(méi)有索引情況下系統(tǒng)會(huì)將rowID(非空唯一列的別名)作為聚集索引。

聚集索引的鍵值順序 與 數(shù)據(jù)行的物理存儲(chǔ)順序一致,這也是為什么建議使用有順列作為聚集索引的原因。

索引使用原則

  1. 只在必要的列上面建立索引。

  2. 在離散度高的列建立索引;

  3. 聯(lián)合索引的最左匹配原則

列的離散度

列的離散度 = count(distinct(column_name)) / count(*) ;

聯(lián)合索引最左匹配

聯(lián)合索引按照從左到右的順序創(chuàng)建搜索樹(shù),創(chuàng)建聯(lián)合索引的時(shí)候通常我們將最常用的列放到最左邊

聯(lián)合索引最左匹配.png

覆蓋索引

在二級(jí)索引(單例或者聯(lián)合索引)里面,如果select 列都包含在二級(jí)索引中,則不需要回表(回到聚集索引查詢表數(shù)據(jù)),這時(shí)候的索引叫做覆蓋索引

覆蓋索引.png

索引條件下推

索引條件下推.png

索引的創(chuàng)建和使用

索引失效的條件

索引失效.png

隱式轉(zhuǎn)換.png

索引創(chuàng)建

創(chuàng)建索引.png

前綴索引.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容