索引相关(二)

索引相关


一、InnoDB 与 MyISAM 对比

存储引擎 InnoDB MyISAM
存储结构 InnoDB表空间数据文件和它的日志文件;表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引 MyISAM表建立三个不同的文件;表定义、数据文件、索引文件
索引的数据结构 B+树 B+树
叶子节点的键值KEY 表的主键(一般主键INT无符号自增) 索引的相应字段的值
叶子节点的DATA域 保存完整的数据记录 数据记录的地址,即数据文件中的每行数据的地址
辅助索引 辅助索引data域存储相应记录主键的值而不是地址 与主索引在结构上无区别,主索引不可以重复,辅助索引可以
索引的类型 聚集索引 非聚集索引
全文索引、压缩索引 不支持 支持
主辅索引 IAnnoDB主键节点同时保存数据行,其他辅助索引保存的是主键索引的值 MyISAM顺序储存数据,索引叶子节点保存对应数据行地址,辅助索引很主键索引相差无几
数据存储 InnoDB键值一起保存,索引与数据一起载入InnoDB缓冲池 MyISAM键值分离,索引载入内存(key_buffer_size),数据缓存依赖操作系统
索引顺序 升序;优点:缩短索引键值的大小;缺点:不支持倒叙提取索引 不一定


博文参考:
由浅入深探究mysql索引结构原理、性能分析与优化


二、注意事项

1.InnoDB本身按照主键作为KEY形成的B+树结构,所以表必须有主键;无主键,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形

2.InnoDB不建议使用过长的字段作为主键,因为辅助索引在检索时是通过查找主索引来间接实现的;那么辅助索引的节点的data域中存放主索引的值,因为主索引很长,索引存储空间会加大

3.InnoDB主键单调,因为InnoDB的数据文件整体是一个B+树的结构,如果出现重复的数据,会不断的调整B+树的结构,增加维护成本及时间

4.InnoDB中辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录

博文参考:
MySQL索引背后的数据结构及算法原理

三、名词解释

存储引擎 聚集索引 非聚集索引
定义 索引中键值的逻辑顺序决定了表中相应行的物理顺序;检索范围数据快速,数据已经按照顺序排序,而无需进行数据排序处理; 索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同
叶子节点 索引的叶节点就是数据节点;如InnoDB的B+树的索引结构中DATA中存放数据的完整记录 叶节点存放的是索引节点,有一个指针指向对应的数据块;如MyISAM的B+树的索引结构中DATA中存放指向数据表中记录的物理地址
数量 每个表中只能有一个 根据实际使用索引的情况而定


博文参考:
聚集索引和非聚集索引

猜你喜欢

转载自mingyundezuoan.iteye.com/blog/2398724