当前位置: 代码网 > it编程>数据库>Mysql > MySQL性能优化必知:聚集索引与覆盖索引如何避免回表?

MySQL性能优化必知:聚集索引与覆盖索引如何避免回表?

2026年07月19日 Mysql 我要评论
索引索引是mysql快速获取数据的一种数据结构。索引的数据结构有哪些?二叉树:能一定程度的优化查询速度,但是容易出现单边树(无法优化查询效率)红黑树:和二叉树一个道理,也可能出现单边树hash表:能提

索引

索引是mysql快速获取数据的一种数据结构。

索引的数据结构有哪些?

  • 二叉树:能一定程度的优化查询速度,但是容易出现单边树(无法优化查询效率)

  • 红黑树:和二叉树一个道理,也可能出现单边树

  • hash表:能提高具体索引字段的查询效率,但是无法排序。
  • b-tree:所有的节点包含数据,节点数据从左往右递增排列

        

b+tree(b-tree变种)

mysql真正使用的索引的数据结构是b+tree

  1. 非叶子节点不存储data,只存储索引(高级冗余),可以存放更多字段
  2. 叶子节点包含所有索引字段,从左到右依次递增
  3. 叶子节点有双向指针相连,提高访问效率

mysql最终使用的索引数据结构为b+tree

b+tree单个节点的分配空间大小为16kb(大概估算:1170*1170*16≈2000w),所以一般生产环境上mysql单表存放一般是一千万数据,更多的数据采用分库分表存储(mysql横向扩容是很方便的)。

mysql用的数据引擎(数据引擎是针对表的,并不是针对数据库):

  • myisam

索引的数据结构为非聚集索引(叶子节点存放主键的指针),索引文件和数据文件分离,查询完后需要回表。该数据引擎不支持数据。

  • innodb

索引的数据结构为聚集索引(主键索引叶子节点会存放整条数据),其他索引(组合索引、唯一索引、普通索引)检索完后,如果索引内包含所需要返回的索引字段,则不需要回表(这里的回表指再次查询主键索引,拿到所需要的的字段,而不是读取数据文件),如果不包含,则存在回表操作,在实际的索引优化中,尽量使用覆盖索引,避免回表操作。

推荐使用自增主键(在新增数据的时候,直接在索引后面追加数据,而不是插入)。如果表中没有主键的时候,数据表会虚拟一个主键,以虚拟的主键生成主键索引。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com