再有人問你MySQL索引原理,就把這篇文章甩給他!

2.1、Hash 索引
Hash索引適合精確查找,但是范圍查找不適合
2.2、二叉樹
1. ?二叉樹的時(shí)間復(fù)雜度為 O(n) 1. ?一個(gè)節(jié)點(diǎn)只能有兩個(gè)子節(jié)點(diǎn)。即度不超過2 1. ?左子節(jié)點(diǎn) 小于 本節(jié)點(diǎn),右子節(jié)點(diǎn) 大于 本節(jié)點(diǎn)


1. ?根節(jié)點(diǎn)會(huì)隨著數(shù)據(jù)的改變而變更 1. ?數(shù)據(jù)量越多,遍歷次數(shù)越多,IO次數(shù)就越多,就越慢(磁盤的IO由樹高決定)
2.4、B樹(二三樹)


2.5、B+樹
在 B+ 樹中,所有數(shù)據(jù)記錄節(jié)點(diǎn)都是按照鍵值的大小存放在同一層的葉子節(jié)點(diǎn)上,而非葉子結(jié)點(diǎn)只存儲(chǔ)key的信息,這樣可以大大減少每個(gè)節(jié)點(diǎn)的存儲(chǔ)的key的數(shù)量,降低B+ 樹的高度 B+ 樹葉子節(jié)點(diǎn)的關(guān)鍵字從小到大有序排列,左邊結(jié)尾數(shù)據(jù)都會(huì)保存右邊節(jié)點(diǎn)開始數(shù)據(jù)的指針。 B+ 樹的層級(jí)更少:相較于 B 樹 B+ 每個(gè)非葉子節(jié)點(diǎn)存儲(chǔ)的關(guān)鍵字?jǐn)?shù)更多,樹的層級(jí)更少所以查詢數(shù)據(jù)更快 B+ 樹查詢速度更穩(wěn)定:B+ 所有關(guān)鍵字?jǐn)?shù)據(jù)地址都存在葉子節(jié)點(diǎn)上,所以每次查找的次數(shù)都相同所以查詢速度要比B樹更穩(wěn)定; B+ 樹天然具備排序功能:B+ 樹所有的葉子節(jié)點(diǎn)數(shù)據(jù)構(gòu)成了一個(gè)有序鏈表,在查詢大小區(qū)間的數(shù)據(jù)時(shí)候更方便,數(shù)據(jù)緊密性很高,緩存的命中率也會(huì)比B樹高。 B+ 樹全節(jié)點(diǎn)遍歷更快:B+ 樹遍歷整棵樹只需要遍歷所有的葉子節(jié)點(diǎn)即可,,而不需要像 B 樹一樣需要對(duì)每一層進(jìn)行遍歷,這有利于數(shù)據(jù)庫(kù)做全表掃描。









聚簇索引是 MySQL 基于主鍵索引結(jié)構(gòu)創(chuàng)建的

SELECT?name?FROM?student?WHERE?name='wx'
SELECT?*?FROM?student?WHERE?name='wx'

評(píng)論
圖片
表情
