MySQL索引实现
1、MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址;
     MyISAM主索引和辅助索引在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复;

2、InnoDB的数据文件本身就是索引文件,叶节点包含了完整的数据记录,这种索引叫做聚集索引。
因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键。
     InnoDB的辅助索引data域存储相应记录主键的值而不是地址;
     辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录;

3、页分裂问题

MySQL索引实现

如果主键是单调递增的,每条新记录会顺序插入到页,当页被插满后,继续插入到新的页;

如果写入是乱序的,InnoDB不得不频繁地做页分裂操作,以便为新的行分配空间。页分裂会导致移动大量数据,一次插入最少需要修改三个页而不是一个页。

如果频繁的页分裂,页会变得稀疏并被不规则地填充,所以最终数据会有碎片。
https://www.cnblogs.com/tilamisu007/p/9293713.html

相关文章:

  • 2021-08-15
  • 2021-07-10
  • 2021-12-03
  • 2021-11-18
  • 2021-09-25
  • 2022-02-21
  • 2021-09-19
猜你喜欢
  • 2021-10-21
  • 2021-10-20
  • 2022-12-23
  • 2022-03-03
相关资源
相似解决方案