測試表信息
1、測試表結構
CREATE TABLE `schedule` ( `id` int(11) NOT NULL AUTO_INCREMENT, `task_id` int(11) NOT NULL, `first_run_time` datetime NOT NULL, `end_run_time` datetime DEFAULT NULL, `next_run_time` datetime DEFAULT NULL, `run_interval` int(11) DEFAULT NULL, `time_unit` tinyint(4) NOT NULL, `status` tinyint(4) NOT NULL, `schedule_config` text NOT NULL, `create_time` datetime NOT NULL, `update_time` datetime NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `task_id` (`task_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1214 DEFAULT CHARSET=utf8
2、測試表數據
當前測試表中有681條數據,每個數據頁16KB,該表ibd文件為176KB(11個數據頁)
3、查看索引的根節點數據頁
SELECT T1.* FROM information_schema.INNODB_SYS_INDEXES AS T1 INNER JOIN information_schema.INNODB_SYS_TABLES AS T2 ON T1.TABLE_ID = T2.TABLE_ID WHERE T2.NAME LIKE 'test/schedule'; +----------+---------+----------+------+----------+---------+-------+-----------------+ | INDEX_ID | NAME | TABLE_ID | TYPE | N_FIELDS | PAGE_NO | SPACE | MERGE_THRESHOLD | +----------+---------+----------+------+----------+---------+-------+-----------------+ | 1559 | PRIMARY | 669 | 3 | 1 | 3 | 658 | 50 | | 1560 | task_id | 669 | 2 | 1 | 4 | 658 | 50 | +----------+---------+----------+------+----------+---------+-------+-----------------+
根節點數據分析
根據主鍵根節點數據頁編號,通過Hex Editor查看ibd文件,可以找到該頁數據為:
00 10 00 11 00 0e 80 00 00 46 00 00 00 05 00 00 00 19 00 0e 80 00 00 e3 00 00 00 06 00 00 00 21 00 0e 80 00 02 9a 00 00 00 07 00 00 00 29 00 0e 80 00 03 a5 00 00 00 08 00 00 00 31 ff ba 80 00 04 79 00 00 00 09
整理后信息為:
每條記錄使用4字節空間存放子節點數據頁上存放的主鍵最小值
80 00 00 46 = 70
80 00 00 e3 = 227
80 00 02 9a = 666
80 00 03 a5 = 933
80 00 04 79 = 1145
主鍵ID在[70,227)的記錄88條,在[227,666)的記錄181條,在[666,933)的記錄182條,在[933,1145)的記錄182條,在[1145,N)的記錄為48行。
每條記錄的最后4各字節存放對應數據頁的頁編號,主鍵索引的葉子節點數據存放於05/06/07/08/09五個數據頁上,主鍵索引根節點頁編號為03,task_id索引的所有數據存放於頁編號04的數據頁。