天天看點

MySQL之InnoDB存儲引擎-邏輯存儲結構MySQL之InnoDB存儲引擎-邏輯存儲結構

文章目錄

  • MySQL之InnoDB存儲引擎-邏輯存儲結構
    • 1.InnoDB邏輯存儲結構圖
    • 2.表空間
    • 3.段
    • 4.區
    • 5.頁
    • 6.行

MySQL之InnoDB存儲引擎-邏輯存儲結構

1.InnoDB邏輯存儲結構圖

MySQL之InnoDB存儲引擎-邏輯存儲結構MySQL之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日志中,然後這個隐藏列就相當于一個指針,可以通過它來找到該記錄修改前的資訊。