查询操作
- InnoDb通过B+Tree聚集索引搜索时,只能找到该记录所在的索引页(index page),而不能到具体的行记录。
- 找到该索引页(index page)后将该页加载入内存。
- 通过key在索引页(index page)的directory slots中进行二分查找(binary search),找到key对应的slot。
- 因为slot是管理多条记录,普通的slot最少管辖4条,最多管辖8条,所以会再根据KEY在对应的slot管理的记录中顺序(linear search)查找,找到最终结果。
-
Page Directory结构:
- 从上图可以看出Page Directory包含至少两个infimum slot,supermum slot,slot指向record(rec)指针(pointer to ‘A’),n_owned代表的是向前有多少个rec属于这个slot,中间被管辖的rec的n_owned = 0。
- 通过directory的二分查找只能查到对应记录所属的slot,还需要通过slot内部的二分查找才能精确定位到对应的记录。这种设计的做法可以减小directory对page空间的占用,又能有很好查找的效率。
-
索引页(index page)结构:
- 索引页的记录是一个单向链表。
- 页是mysql操作的最小单位,块是文件系统操作的最小单位,扇区是磁盘操作的最小单位。
-
参考资料:
- http://blog.csdn.net/duxingxia356/article/details/42674451
- https://dev.mysql.com/doc/internals/en/innodb-page-directory.html