1. InnoDB中Page結(jié)構(gòu)
在InnoDB中,Page是整個(gè)InnoDB存儲的最基本構(gòu)件,也是InnoDB磁盤管理的最小單位定枷,與數(shù)據(jù)庫相關(guān)的所有內(nèi)容都存儲在這種Page結(jié)構(gòu)里廉白,默認(rèn)大小為16K隧饼。以下是page頭結(jié)構(gòu)
Previous Page :前向頁指針
Next Page :后向頁指針
Page Number :當(dāng)前頁號
Page Type : 頁類型(數(shù)據(jù)頁、Undo頁助币、系統(tǒng)頁浪听、事務(wù)數(shù)據(jù)頁)
以下是Page主體結(jié)構(gòu)
在page中,數(shù)據(jù)和索引存儲在User Records中眉菱,User Records由一條一條的Record組成迹栓,每條記錄代表索引樹上的一個(gè)節(jié)點(diǎn)(非葉子節(jié)點(diǎn)和葉子節(jié)點(diǎn)),User Record有四種類型:
1)主鍵索引樹非葉節(jié)點(diǎn)?
2)主鍵索引樹葉子節(jié)點(diǎn)?
3)輔助鍵索引樹非葉節(jié)點(diǎn)?
4)輔助鍵索引樹葉子節(jié)點(diǎn)
它們都有一個(gè)Next指針指向下一個(gè)頁俭缓,這些頁在邏輯上有序克伊,物理上可以無序酥郭。
2. 有序索引是如何構(gòu)建的?
按如下邏輯構(gòu)造一個(gè)輔助索引
CREATE TABLE t1 (a INT PRIMARY KEY, b INT, c BLOB);
INSERT INTO t1 VALUES (1, 11, 'hello111');
INSERT INTO t1 VALUES (2, 22, 'hello222');
INSERT INTO t1 VALUES (3, 33, 'hello333');
INSERT INTO t1 VALUES (4, 44, 'hello444');
INSERT INTO t1 VALUES (5, 55, 'hello555');
INSERT INTO t1 VALUES (6, 66, 'hello666');
INSERT INTO t1 VALUES (7, 77, 'hello777');
INSERT INTO t1 VALUES (8, 88, 'hello888');
INSERT INTO t1 VALUES (9, 99, 'hello999');
INSERT INTO t1 VALUES (10, 1010, 'hello101010');
ALTER TABLE t1 ADD INDEX k1(b);
參考內(nèi)容
MySQL InnoDB Sorted Index Builds?https://www.percona.com/blog/2019/05/08/mysql-innodb-sorted-index-builds/