mysql索引筆記

常見索引的類型

  • hash索引
    適用于等值查詢的場景
  • 有序數(shù)組
    適用于等值查詢和范圍查詢
  • 搜索數(shù)

InnoDB B+樹索引

innoDB的索引分2種

  • 聚簇索引(也叫主鍵索引)
  • 二級索引(也叫非主鍵索引)


    image.png

    圖中左邊是聚簇索引,右邊是二級索引,兩者最大的區(qū)別就是葉子節(jié)點的內(nèi)容不一樣,聚簇索引的內(nèi)容是整行數(shù)據(jù),二級索引的內(nèi)容是行的主鍵。

索引插入
image.png

插入700時,加到R5后面。


image.png

插入400時,R4,R5移動空出位置。如果R5所在的數(shù)據(jù)頁已滿的情況下,會申請新的頁,然后將部分數(shù)據(jù)挪到新頁,這個過程叫頁分裂。

索引的等值查找

select * from T where ID=500 該語句是主鍵查找方式,直接搜索聚簇索引,即圖中左邊的索引,直接得到R4.
select * from T where k=5 該語句走的是右邊的二級索引,查詢到的是500這個主鍵,所以需要再用500去左側主鍵索引搜索,查詢到R4這個數(shù)據(jù),也就是說二級索引搜索要掃描2次,一次是二級索引,另外一次是主鍵索引,這個過程叫回表。

索引的范圍查找

select * from T where k between 3 and 5


image.png

第一步:使用3掃描二級索引取得ID=300,拿著300掃描主鍵索引得到R3。
第二部: 取下一個值k=5 取得ID=500,拿著500掃描主鍵索引得到R4。
第三步: 取下一個值 K=6,不滿足 between 3 and 5 的條件,循環(huán)結束。

覆蓋索引

select ID from T where k between 3 and 5
該語句只查ID,因為二級索引的葉子節(jié)已經(jīng)是ID,所有不需要回表,可以理解為索引已經(jīng)覆蓋了結果范圍。

最左前綴原則
image.png

如圖的索引,當查張三時,可以快速定位到ID4,然后遍歷所需的結果。
where name like ‘張%’ 也能用上索引。
最左前綴可以是聯(lián)合索引的最左N個字段,也可以是字符串索引的最左M個字符。

索引下推

select * from tuser where name like '張%' and age=10 and ismale=1;
在MySQL 5.6之前,只能從ID3開始一個個回表。到主鍵索引上找出數(shù)據(jù)行,再對比字段值
MySQL 5.6 引入的索引下推優(yōu)化(index condition pushdown), 可以在索引遍歷過程中,對索
引中包含的字段先做判斷,直接過濾掉不滿足條件的記錄,減少回表次數(shù)。


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

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

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