Mysql索引二(白话文) B树和B树的区别B树一个节点是一个数组数组中数据是键值对比如创建user表用户ID和姓名二级索引内部节点存的是[{id:1,name:张三}{id:2,name:李四}]注意这是普通索引如果是聚簇索引内部节点存的是[{id:1, name:‘张三’, 其他列…},{id:2, name:‘李四’, 其他列…} ]参考下图每个方框就是一个节点数组每个数字就是一个keyvalue键值对B树一个节点依旧是一个数组数组中数据是键值对多了一个“最下层节点子节点”比如创建user表用户ID和姓名二级索引内部节点存的是[{id:1,name:张三子节点指针}{id:2,name:李四子节点指针}]注意不管是二级索引还是聚簇索引内部节点都不会存整行数据。叶子节点如果是聚簇索引存整行数据二级索引存索引字段数据参考下图内部节点最后一层叶子节点B树的叶子节点会按顺序链接在一起非常时候适合范围查找总结最后一层称叶子节点上面称内部节点回表问题回表就是查询一棵树不够要在查询一棵树。一张表一定只能有一颗聚簇索引树节点存每行数据。你想一下现在有这样一张表现在只有一颗id字段的聚簇索引树我查询所有字段字段条件和id有关mysql走聚簇索引现在只有一颗id字段的聚簇索引树我查询所有字段字段条件和id无关mysql全盘扫描现在加了一个name二级索引index_n你查询name字段条件和id有关mysql直接走index_n索引就完事你查询name字段条件和idname无关全盘扫描查询所有字段条件和name有关mysql先从二级索引index_n中找到数据id再去聚簇索引获取整行数据回表总结回表要看查询字段条件字段两个回表是比较慢的。帮我画个图贴在评论区谢谢Mysql优化针对索引覆盖索引尽量让 SELECT 的字段全部包含在某个索引中避免回表。区分度高的列放前面能过滤掉更多数据的列在联合索引中越靠前越好。避免索引失效在索引列上做计算、用函数、类型隐式转换都会导致索引失效。最左前缀原则联合索引 (a, b, c)查询条件必须从 a 开始才能用上索引。具体案例可以ai我也是ai的用 EXPLAIN 验证优化效果注意致命错误给所有列都建索引主键用 UUID 或长字符串最左匹配原则特指联合索引索引 (a, b, c)但 WHERE b 1 AND c 2就不会走索引。因为索引树a 相同的情况下按 b 排序b 也相同的情况下再按 c 排序。先以b搜索无序的索引没办法走索引总结了解索引的优缺点下一篇介绍1mysql锁概念想了解的任意内容打在评论区一起讨论