引言:一个SQL查询的“两次奔波”
你有没有遇到过这样的场景:明明已经建了索引,查询却还是慢如蜗牛?
这可能是因为你的SQL经历了“回表”的折腾!今天我们就用5分钟,彻底搞懂这个MySQL性能杀手,让你的查询速度飞起来!
一、回表:数据库的“二次跑腿”服务
场景还原:
想象你去图书馆找《哈利波特》,先查索引卡(书名→书架号)找到A区3排,结果跑到A3发现只有书的位置编号(主键ID),还得再跑到B区2排才能拿到书——这就是数据库的“回表”!
官方定义:
当使用二级索引查询时,若所需字段不在索引中,需根据索引找到的主键ID,二次查询主键索引获取数据的行为。
二、解剖MySQL索引:双索引结构的秘密
1. 聚集索引(主键索引)
-
结构:B+树叶子节点直接存完整数据行
-
特点:每张表唯一,物理存储顺序与索引顺序一致
2. 二级索引(非聚集索引)
-
结构:B+树叶子节点存主键值(非数据行!)
-
特点