Mysql索引優化和底層資料結構分析

2021-10-01 11:36:51 字數 1130 閱讀 8836

資料結構視覺化測試**

1.慢sql優化—>看看是不是走了索引,比如千萬級別的資料加索引效果非常好。

2.索引是幫助mysql高效獲取資料排好序的資料結構

索引資料結構:

二叉樹紅黑樹

hash表(如果等值查詢確實快,如果where col>7這樣就不行了)

b-tree

mysql索引底層預設是b+tree(b加樹)不是b-tree(b樹)不是二叉樹,因為二叉樹右面必須大於小於父節點,左邊小於等於父節點。如果資料是遞增有序的,則此時退化程了鍊錶,所以二叉樹有時會不滿足業務情況

紅黑樹(二叉平衡樹)也有點問題–查詢次數少了,樹的高度不斷增長,隨著錶行數增加幾百萬行,紅黑樹高度一直增長不可控制,比如要查詢紅黑樹20此查詢才能找到,此時要20次io操作,效能很低。

b-tree (b樹,多叉平衡樹,葉子節點沒有指標)對紅黑樹進行改造,葉節點具有相同蛇毒 葉節點的指標為空 所有索引元素不重複 節點種的資料索引從左到右遞增排列,目的是讓樹的高度(2-4最合適)降低。

show global status like 『innodb_page_size』;–> variable_name value

innodb_page_size 16384

b+tree(mysql索引預設的結構,對b-tree的改造,多叉平衡樹,葉子節點有指標)

b+tree特性:

1.非葉子節點不儲存data,只儲存索引(冗餘),可以放更多的索引

2.葉子節點包含索引字段

3.葉子節點用指標鏈結,提高區間訪問效能

相對於b-tree,把data都挪到了葉子節點,非葉子節點沒有任何元素,沒個data代表了所在的行。如圖

h=3時候b+tree大概能放2千多萬索引元素

innodb儲存引擎的表只有兩個檔案.frm和.ibd兩個檔案

架構師技術框架腦圖

mysql 索引 層數 mysql 索引底層

hash索引o 1 b 樹索引 o logn 為什麼紅黑樹出現了,因為防止某些情況下二叉排序樹退化為鍊錶 誕生了二叉排序平衡樹 樹的效能取決於樹的高度 為什麼db要用m路b樹,為了再降低樹的高度,減少db 磁碟io 次數,如果在記憶體中,紅黑樹效率更高 為什麼m不能無限大,因為會退化成有序陣列,無法...

Mysql索引底層資料結構

想要了解索引,首先要知道索引到底是什麼呢 索引是幫助mysql高效獲取資料的排好序的資料結構 通俗來講就好比喻一本書,那這本書的目錄就好比做索引 索引儲存在檔案裡 儲存引擎是myisam的索引檔案儲存在 myi檔案中,儲存引擎是innodb的索引檔案儲存在 idb檔案中 通常資料庫中的資料就是存在硬...

MySQL索引底層資料結構詳情

目錄 為什麼是b 樹而不是b樹?首先看看b樹和b 樹在結構上的區別 b樹結構 b 樹 可以看到 首先需要了解聚簇索引和非聚簇索引。聚簇索引 在聚簇索引中,葉子頁包含了行的全部資料,節點頁值包含索引列。innodb通過主鍵聚集資料,如果沒有定義主鍵則選擇乙個唯一的非空索引列代替 如果沒有這樣的索引,i...