文章目錄
- MySQL之InnoDB存儲引擎-邏輯存儲結構
-
- 1.InnoDB邏輯存儲結構圖
- 2.表空間
- 3.段
- 4.區
- 5.頁
- 6.行
MySQL之InnoDB存儲引擎-邏輯存儲結構
1.InnoDB邏輯存儲結構圖
2.表空間
表空間是InnoDB存儲引擎邏輯結構的最高層, 如果使用者啟用了參數 innodb_file_per_table(在8.0版本中預設開啟) ,ibd檔案其實就是表空間檔案,則每張表都會有一個表空間(xxx.ibd),一個mysql執行個體可以對應多個表空間,用于存儲記錄(即表中資料)、索引等資料,在表空間中可以包含多個Segment段
3.段
表空間是由各個段組成的
段, 分為資料段(Leaf node segment)、索引段(Non-leaf node segment)、復原段(Rollback segment),InnoDB是索引組織表,資料段就是B+樹的葉子節點, 索引段即為B+樹的非葉子節點。段用來管理多個Extent(區)。InnoDB中對于段的管理,都是引擎自身完成,不需要人為對其控制,一個段中包含多個區。
4.區
區,表空間的單元結構,每個區的大小為1M。 預設情況下, InnoDB存儲引擎頁大小為16K, 即一個區中一共有64個連續的頁。
5.頁
頁,是InnoDB 存儲引擎磁盤管理的最小單元,每個頁的大小預設為 16KB。為了保證頁的連續性,InnoDB 存儲引擎每次從磁盤申請 4-5 個區;表結構中的記錄以及索引都是在頁中存儲的
16KB是指16x1024個位元組
6.行
InnoDB 存儲引擎是面向行的,也就是說資料是按行進行存放的。
在行中,預設有兩個隐藏字段:
Trx_id:每次對某條記錄進行改動時,都會把對應的事務id指派給trx_id隐藏列。
Roll_pointer:每次對某條引記錄進行改動時,都會把舊的版本寫入到undo日志中,然後這個隐藏列就相當于一個指針,可以通過它來找到該記錄修改前的資訊。