首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL InnoDB 存儲引擎深度解析:表結構與頁管理(二)

     編輯:MySQL 綜合教學

MySQL InnoDB 存儲引擎深度解析:表結構與頁管理(二)

承接上篇,繼續深入 InnoDB 表的內部結構,重點剖析資料頁架構、命名檔案格式、視圖與分區表。

4. InnoDB 資料頁結構

頁是 InnoDB 管理磁碟的最小單位(預設 16KB)。B-tree 節點頁存放實際行資料。頁由七大部分組成:

  1. File Header(檔案頭,38 bytes):頁類型、校驗和、上下頁指針、LSN 等。
  2. Page Header(頁頭,56 bytes):頁狀態、堆頂指針、記錄數、垃圾空間等。
  3. Infimum & Supremum Records:兩個虛擬記錄,分別代表最小/最大邊界,頁建立時生成,永不刪除。
  4. User Records(用戶記錄):實際行資料,按主鍵順序鏈表存放。
  5. Free Space(空閒空間):刪除記錄後釋放的空間,形成鏈表供複用。
  6. Page Directory(頁目錄):稀疏目錄,槽指向記錄相對位置,支援二分查找加速定位。
  7. File Trailer(檔案尾,8 bytes):校驗和與 LSN,配合 Header 驗證頁完整性。

A. File Header 詳解(8 字段,38 bytes)

關鍵字段:FIL_PAGE_TYPE 標識頁類型(如索引頁、Undo 頁、系統頁等)。

B. Page Header 詳解(14 字段,56 bytes)

記錄頁方向、記錄數、垃圾空間大小、最後插入位置等。

C. Infimum 與 Supremum

Compact 與 Redundant 格式下佔用空間不同:

D. User Record 與 Free Space

刪除記錄不立即物理移除,而是加入空閒鏈表,後續插入可複用。

E. Page Directory(頁目錄)

  • 槽為稀疏目錄,每槽可含多條記錄(n_owned 4~8)。
  • 記錄按索引鍵值有序,支援二分查找定位槽,再順序遍歷精確定位。
  • B+樹只能定位到頁,頁載入記憶體後靠 Page Directory 二分查找,耗時極低通常忽略。

F. File Trailer

8 bytes:前 4 bytes 為頁校驗和,後 4 bytes 為 LSN。與 Header 對比驗證頁是否完整寫入磁碟。參數 innodb_checksums 控制啟用,5.6.6+ 新增 innodb_checksum_algorithm(crc32/innodb/none/strict_*)。

5. Named File Formats 機制

為解決版本間頁格式不兼容(如 1.0.x 引入壓縮、Off-page 存儲),引入 innodb_file_format(Antelope/Barracuda)與 innodb_file_format_check(預設 ON)參數管理兼容性。

6. 視圖

虛擬表,由 SQL 定義,無物理存儲。實際開發中較少使用,略過。

7. 分區表

僅支援水平分區(Range/List/Hash/Key),垂直分區不支援。實際專案中較少用到,略過。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved