Mysql索引页结构

查询操作

  1. InnoDb通过B+Tree聚集索引搜索时,只能找到该记录所在的索引页(index page),而不能到具体的行记录。
  2. 找到该索引页(index page)后将该页加载入内存。
  3. 通过key在索引页(index page)的directory slots中进行二分查找(binary search),找到key对应的slot。
  4. 因为slot是管理多条记录,普通的slot最少管辖4条,最多管辖8条,所以会再根据KEY在对应的slot管理的记录中顺序(linear search)查找,找到最终结果。

  • Page Directory结构:
    Mysql索引页结构_第1张图片

    • 从上图可以看出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索引页结构_第2张图片

    • 索引页的记录是一个单向链表。
    • 页是mysql操作的最小单位,块是文件系统炒作的最小单位,扇区是磁盘操作的最小单位。
  • 参考资料:

    • http://blog.csdn.net/duxingxia356/article/details/42674451
    • https://dev.mysql.com/doc/internals/en/innodb-page-directory.html

你可能感兴趣的:(MYSQL,IT)