天天看點

InnoDB 怎麼支援範圍查找的

作者:程式員社群

前言

這些知識的話基本上都是面試比較喜歡問東西 是以就再細分整理一下 一是鞏固自己的知識 二是 當作筆記記錄 能幫到大家最好

邏輯圖

這個是一個主鍵索引的索引圖 最底層是 資料 上面是索引 怎麼支援範圍查找其實就是怎麼去樹裡面進行資料查詢的流程

InnoDB 怎麼支援範圍查找的

可以看到上圖中的 青色塊 資料就是我們的索引資料 我們之前經常說的是加索引 其實就是把上面的這些資料頁生成出來 InnoDB 預設都會給你加上主鍵 索引主鍵索引是一直存在的 在我們進行資料查找的時候

select id from bTree where id = 6 如果我們進行這個資料的查詢就會 從上面的頁下機型尋找 我們可以看出這個圖是越往上 範圍越小是以能加快查詢速度 上面這個SQL 語句的話執行流程就是如下圖

InnoDB 怎麼支援範圍查找的

在進行查詢的時候會通過頁資料 進行比較 進而縮小機關找到資料

這種情況是我們使用索引的時候我們的流程但是如果我們不去使用索引的話會怎麼去執行

假設我們查詢 select id from bTree where code = 7 這個時候我們不會使用索引 索引就不能使用上面的索引頁 我們隻從最底層的 資料直接可是一個一個的進行對比

InnoDB 怎麼支援範圍查找的

這個過程就是全表掃描

  • 葉子節點從左往右是全表掃描
  • 索引頁從上往下 是索引查詢

進入正題

那麼通過上面的圖基本可以了解在進行資料查詢的時候是怎麼去走的索引 那麼我們在 範圍查找的時候是怎麼走的索引呢

select id from bTree where id > 6

  • 這個思路很簡單是 先找到Id = 6 的資料 定位到資料在哪裡
InnoDB 怎麼支援範圍查找的

然後 在這個資料後面的資料就是>6的資料傳回資料就行了

那為什麼範圍查找索引會失效

最直接的原因我們上面知道 MySQL 可以直接進行全表掃描 當我查詢的資料範圍過大的時候會導緻索引失效

mysql 是否根據首次索引條件查詢出的主鍵進行二次查找,也是要看查詢出來的資料量級,如果資料量接近全表資料量的話,就會進行全表掃描,否則根據第一次查詢出來的主鍵進行二次查詢。

作者:變成派大星

連結:https://juejin.cn/post/7168452332219924494

繼續閱讀