欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

索引相关(二)

程序员文章站 2022-04-10 17:14:06
...
索引相关


一、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中存放指向数据表中记录的物理地址
数量 每个表中只能有一个 根据实际使用索引的情况而定


博文参考:
聚集索引和非聚集索引
相关标签: 索引