本文是《mysql技術內幕--innodb儲存引擎》的學習筆記。
在innodb儲存引擎中,表都是根據主鍵順序組織存放的,這種儲存方式的表稱為索引組織表(index organized table)。索引組織表其實就是儲存在乙個索引結構中的表。
innodb對主鍵建立聚簇索引。如果你不指定主鍵,innodb會用乙個具有唯一且非空值的索引來代替。如果不存在這樣的索引,innodb會自動建立乙個6位元組大小的指標作為主鍵,然後對其建立聚簇索引。
注:如果表中存在多個非空唯一索引時,innodb儲存引擎將選擇建表時第乙個定義的非空唯一索引為主鍵。
邏輯儲存結構如下圖:
從innodb儲存引擎的邏輯儲存結構看,所有資料都被邏輯地存放在乙個空間中,稱為表空間。表空間又由段(segment)、區(extent)、頁(page)組成。頁在一些文件中有時也稱為塊(block)。
表空間可以看做時innodb儲存引擎邏輯結構的最高層,所有的資料都存放在表空間中。預設情況下innodb只有乙個共享表空間ibdata1,即所有的資料都存放在這個表空間中。如果使用者啟用了innodb_file_per_table,則每張表內的資料可以單獨放到乙個表空間內。
需要注意的是,啟用了innodb_file_per_table引數,每張表的表空間內存放的只是資料、索引和插入緩衝bitmap頁,其他類的資料,如回滾資訊,插入緩衝索引頁、系統事務資訊,二次寫緩衝等還是存放在原來的共享表空間內。
表空間是由各個段組成的,常見的段有資料段、索引段、回滾段等。因為innodb引擎表是索引組織的,因此資料即索引,索引即資料。那麼資料段即為b+樹的葉子結點,索引段即為b+樹的非葉子結點。
區是由連續頁組成的空間,在任何情況下每個區的大小都為1mb。為了保證區中頁的連續性,innodb一次從磁碟申請4-5個區。在預設情況下,innodb儲存引擎頁的大小為16kb,即乙個區中一共有64個連續的頁。
頁是innodb磁碟管理的最小單位,在innodb儲存引擎中,預設每個頁的大小為16kb。
在innodb儲存引擎中,常見的頁型別有:
資料頁nnodb資料是按照行進行存放的。每個頁存放的行記錄也是有硬性定義的,最多允許存放16kb/ 2 - 200行的記錄,即7992行記錄。undo頁
系統頁事務資料頁
插入緩衝點陣圖頁
插入緩衝空閒列表頁
未壓縮的二進位製大物件頁
壓縮的二進位製大物件頁
行又分為compact和redundant兩種格式。
innoDB儲存引擎邏輯儲存單元
innodb儲存引擎的邏輯儲存單元由表空間 段 區 頁 塊page 行等構成,所有的記錄存放在資料庫頁 page 中,也可以稱之為資料塊 一般情況下 非壓縮的預設大小為16k。乙個區有64個page組成 16 64 1024k 即1m 16k 64個頁 8k 128個頁 4k 256個頁 乙個頁 p...
Mysql之InnoDB儲存引擎的邏輯儲存結構
1.mysql 的儲存結構分為 5 級 表空間 段 簇 頁 行 1.表空間可以看做是innodb 儲存引擎邏輯結構的最高層,所有的資料都存放在表空間中。2.表空間分為 系統表空間 獨佔表空間 通用表空間 臨時表空間 undo 表空間。參考 下面的mysql innodb 磁碟儲存結構中對錶空間的介紹...
InnoDB 儲存引擎
innodb是事務型資料庫的首選引擎,支援事務安全表 acid 支援行鎖定和外來鍵。mysql 5.5.5 之後,innodb作為預設儲存引擎。innodb的主要特性有一下幾項。a.innodb給mysql提供了具有提交 回滾和崩潰恢復能力的事務安全 acid相容 儲存引擎。innodb鎖定在行級並...