主要闡述InnoDB存盤引擎(MySQL5以后的默認引擎),
資料庫中最基本的組成結構是資料表,視覺上的表和其對應的磁盤結構如下:

此圖參考了廈門大學課堂:MySQL原理 ,但是視頻中一些更多細節沒有涉及,比如Leaf node segment和Non-leaf node segment其實就是葉子節點和非葉子節點段,
照inode,page相關概念,一顆B+樹當然只有這兩種段,來管理各種page(樹節點),資訊較少,且看且珍惜,
更多關于tablespace的資訊移步:MySQL Tablespaces
**核心:MySQL以Page為單位進行資料管理(默認1個Page=16KB),因為磁盤尋道原因,一次將讀取1個Page到記憶體,即每次查詢,一次IO至少是一個Page的資料被裝載到記憶體,
將segment,extent,page的關系描繪如下:

Page的組成:

**page directory:提高records部分的查詢速度(單鏈表-->排序-->二分查找),定位到page后,records記錄太長,設計了page directory的slot插槽,每個slot包含一段records記錄,提高查找效率,
為什么一個Page是16KB?太大,page directory定位時間太長;太小,磁盤尋道時間變長,IO次數變多,這是一個折中值,(固態硬碟沒有磁盤尋道,可以考慮將Page size的值改為小于16KB的更小的值,仍需要測驗驗證資料支撐),
索引頁:
MySQL中:每個索引都對應了一顆B+樹,
聚集(聚集不一定是主鍵,但主鍵一定是聚集)索引對應了一顆B+樹,葉子節點存盤了資料;
非聚集(輔助)索引對應了一顆B+樹,葉子節點只存盤了主鍵,所以需要額外一次去聚集索引B+樹查找所需資料(即回表),
主鍵索引和輔助索引檢索示意:

本文中部分圖的來源在這里,
作者:hangwei
出處:http://www.cnblogs.com/hangwei/
關于作者:專注于開源平臺,分布式系統的架構設計與開發、資料庫性能調優等作業,如有問題或建議,請多多賜教!
著作權宣告:本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文鏈接,
如果您覺得文章對您有幫助,可以點擊文章右下角“推薦”一下,您的鼓勵是作者堅持原創和持續寫作的最大動力!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/540422.html
標籤:其他
上一篇:MySQL-InnoDB磁盤結構
