說一下Mysql索引

索引

什麼是索引

幫助數據庫高效獲取數據的數據結構

索引能幹什麼?

當表中數據量越來越大時,索引可以明顯提高查詢效率,當然索引並不是越多越好

索引的分類

在這裏插入圖片描述

MySql中索引默認結構爲B+樹,爲什麼不是B樹、Hash,二叉樹,紅黑樹?

  • B樹:因爲其不管是葉子節點還是非葉子節點都會保存數據,這樣導致在非葉子節點中能保存的指針數量變少,指針少的情況下要保存大量的數據,只能增加樹的高度,導致IO操作變多,查詢性能變低
  • Hash:雖然可以快速定位但是沒有順序,IO複雜度高
  • 二叉樹:樹的高度不均勻,不能自平衡,查找和樹的高度有關,並且IO代價高
  • 紅黑樹:樹的高度隨着數據量的增加而增加,IO代價高

總結

  • MySQL使用B+Tree作爲索引數據結構。
  • B+Tree在新增數據時,會根據索引指定列的值對舊的B+Tree做調整。
  • 從物理存儲結構.上說,B-Tree 和B+Tree都以頁(4K)來劃分節點的大小,但是由於B+Tree中中間節點不存儲數據,因此B+Tree能夠在同樣大小的節點中,存儲更多的key,提高查找效率。
  • 影響MySQL查找性能的主要還是磁盤I0次數,大部分是磁頭移動到指定磁道的時間花費。
  • MyISAM存儲引擎下索引和數據存儲是分離的,InnoDB 索引和數據存儲在一起。
  • InnoDB 存儲引擎下索引的實現,(輔助索引)全部是依賴於主索引建立的(輔助索引中葉子結點存儲的並不是數據的地址,還是主索引的值,因此,所有依賴於輔助索引的都是先根據輔助索引查到主索引,再根據主索引查數據的地址)。
  • 由於InnoDB索引的特性,因此如果主索引不是自增的(id作主鍵),那麼每次插入新的數據,都很可能對B+Tree的主索引進行重整,影響性能。因此,儘量以自增id作爲InnoDB的主索引。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章