“為什么加索引能提升查詢效率”!
我們都認為“加索引”提升查詢效率是理所應當的
竟然還有理由? 該怎么回答呢?
大家好,我是Mic,一個作業了14年的Java程式員
下面分析一下這個問題的考察點
考察目標
這是一道原理性的問題,考察求職者對于Mysql中索引的實作原理的理解程度,
一般情況下,考察3年經驗以上人會多一點,
畢竟Mysql是應用開發的基礎存盤組件,
因此,對于這個問題的回答,建議是把索引的實作以及它的作業原理說清楚,這樣會更容易得到面試官的認可,
問題決議
想必大家都知道,Mysql的采用了B+樹作為索引的存盤結構來提升資料檢索的效率,
其實如果大家要真正去理解并且搞懂索引,我建議大家從三個緯度來看,
-
第一個, 為什么需要索引
-
第二個, 索引是如何提升效率的
-
第三個, 為什么采用B+樹
第一個問題,為什么需要索引?
很簡單,如果一本中華字典,沒有前面的字典目錄,你需要花多久才能找到某個漢字?
同樣的道理,如果沒有索引,當我們查詢資料的時候,需要從磁盤里面隨機查找,機械磁盤隨機讀取資料需要頻繁尋找磁道以及從磁盤讀取資料,這個程序非常耗時,

第二個問題,索引是如何提升效率的?
有了索引以后,相當于把索引列以及所屬的磁盤塊地址快取到記憶體里面,在資料查詢的時候,直接找到目標資料列所屬的磁盤地址,去讀取對應磁盤塊的資料就行了,相當于減少了磁盤IO的次數,
第三個問題,為什么要采用B+樹
原因有很多,如果單純在在性能角度來考慮,磁盤IO次數越少越好,
那用什么樣的資料結構來存盤索引列能夠達到這個目的呢?
很顯然,多路平衡查找樹就是一個很好的選擇,也就是B樹或者B+樹,
至于為什么采用B+樹,我在前面的視頻里面有專門說過,大家可以去找找看,
高手:
準確來說,只有命中了索引列的查詢,才能提升效率,
并且,即便是命中了索引,查詢效率也不一定高,比如在性別欄位上加索引,
因為資料的散列度不高,導致可能會遍歷整顆B+樹,
我認為,加索引能夠提升查詢效率的根本原因是:
InnoDB采用了B+樹這種多路平衡查找樹來存盤索引,使得在千萬級數量的情況下,樹的高度可以控制在3層以內,
而層高代表磁盤IO的次數,因此基于索引查詢減少了磁盤IO次數,
總結
好的,你學廢了嗎?
如果你喜歡我的作品,記得點贊收藏加關注!!!
需要Java面試資料、簡歷模板、學習路線圖掃下方!
著作權宣告:本博客所有文章除特別宣告外,均采用 CC BY-NC-SA 4.0 許可協議,轉載請注明來自
Mic帶你學架構!
如果本篇文章對您有幫助,還請幫忙點個關注和贊,您的堅持是我不斷創作的動力,歡迎關注「跟著Mic學架構」公眾號公眾號獲取更多技術干貨!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/509259.html
標籤:其他
