MySQL索引实现
2019-05-08 09:19
127 查看
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
相关文章推荐
- 基于Solr DIH实现MySQL表数据全量索引和增量索引
- 2014阿里实习生面试题——mysql如何实现索引的
- 自己实现mysql “函数索引”
- 讨论MySQL索引底层实现
- MySQL全文检索中Like索引的实现
- MySQL由浅入深理解索引的实现
- Sphinx中通过mysql客户端访问Sphinx,实现实时索引,需要注意的要点
- 2014阿里实习生面试题——mysql如何实现索引的
- MySQL innodb 索引 B+树实现
- MySQL innodb 索引 B+树实现 [复制链接]
- Mysql使用索引实现查询优化
- 数据库为什么要用B+树结构--MySQL索引结构的实现
- mysql索引实现
- MySQL原理研究:myisam和innodb索引实现的不同
- mysql 索引底层实现
- Nutch 2.2.1+MySQL+Solr4.2实现网站内容的抓取和索引
- 第三步solr实现MySQL 数据库数据表索引
- MySql索引的底层实现
- mysql索引的实现原理
- MySql 的索引实现原理