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

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

3、页分裂问题

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

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

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

posted on 2019-05-08 09:19  vow007  阅读(4)  评论(0编辑  收藏  举报  来源