[MySQL]InnoDB邏輯存儲結構
InnoDB存儲引擎中的表非常像Oracle中的索引組織表,每張表必須得有主鍵,如果表在創建時沒有顯示定義主鍵,則根據以下原則自動創建主鍵:
1)如果有非空的唯一索引,則該索引所在的列為主鍵;
2)如果不符合上述條件,自動創建一個6個字節的指針為主鍵。
InnoDB存儲引擎的邏輯存儲結構和Oracle幾乎一樣,從大到小分別為:表空間、段、區、頁,它們的關系如下圖所示:
表空間
在上一篇《MySQL InnoDB文件介紹》http://www.BkJia.com/database/201306/219327.html中,我們知道InnoDB有一個默認的表空間,如果我們啟用了參數innodb_file_per_table,則針對每張可以單獨放在表空間裡。這裡需要注意的是,即時啟用了innodb_file_per_table,也並不是表中所有的數據都單獨放在自己的表空間裡,單獨表空間只存放數據、索引和插入緩沖,其它如Undo、系統事務信息、二次寫緩沖等還是存放在默認共享表空間裡。
段
表空間有若干各段組成,常見的有數據段、索引段、回滾段等。前面提到InnoDB中的表是索引組織表,因此數據段也稱為leaf node segment,索引段也稱為non-leaf node segment。
區
每64個連續的頁組成區,因此區大小正好為1M。
頁
頁是InnoDB磁盤管理的最小單位,固定大小為16K,不可以更改(也許通過更改源碼可以修改固定大小)。
行
InnoDB表中數據按行存儲。