,索引概念
數(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ù)的落地形式

MyISAM

InnoDB


問(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ǔ)順序一致,這也是為什么建議使用有順列作為聚集索引的原因。
索引使用原則
只在必要的列上面建立索引。
在離散度高的列建立索引;
聯(lián)合索引的最左匹配原則
列的離散度
列的離散度 = count(distinct(column_name)) / count(*) ;
聯(lián)合索引最左匹配
聯(lián)合索引按照從左到右的順序創(chuàng)建搜索樹(shù),創(chuàng)建聯(lián)合索引的時(shí)候通常我們將最常用的列放到最左邊

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

索引條件下推

索引的創(chuàng)建和使用
索引失效的條件


索引創(chuàng)建




