作者回复: 这是一个合理的猜想 :) MySQL 8启动时,会加载数据字典(mysql.ibd),数据字典中有一个mysql.dd_properties表,16讲中提到过这个表。从这个表里,能看到一些有意思的数据,包括各个数据字典表的一些内部信息。每个数据字典表索引的root页面编号,这里应该也有。 至于mysql.dd_properties的root页面号,应该是写死在代码中的。 而dd_properties的数据,是在数据库初始化(mysqld --initialize)的时候填充的。
作者回复: 这是一个很好的问题。 如果branch page上不存主键列,在key列有重复值的时候,插入一个key时应该写到那个页面中去? 假设表里已经有很多key-x的记录,在insert values ( 'key-x', 'pk-x')时,怎么定位最终要插入的那个Leaf页面? key列和主键列拼在一起后,就不会有重复的记录了,可以精确定位。