下面表中:主键id是聚簇索引,name是辅助索引。
执行这样一条SQL: select name from A where name="s;name字段是有索引,所以MYSQL在通过name进行査询的时候,是需要扫描两颗B+tree树的。
- 第一遍:先通过二级索引定位主键值1。
- 第二遍:根据主键值在聚簇索引中定位具体的行记录。回表指的就是:现根据辅助索引查询到主键值,再根据主键值在聚簇索引中获取行记录,这就是回表。
使用覆盖索引,来避免回表的问题:
- 覆盖索引:如果一个索引包含了所有需要查询的字段的值(不需要回表),这个索引就是覆盖索引
- 覆盖索引优化的思路:只需要在一颗索引树上就能获取SQL所需的列数据,无需回表,速度更快。
具体的实现方式:
- 将被查询的字段建立联合索引,这样就可以避免回表,可以直接返回索引中的数据。
比如有这样一条SQL:
标签:name,如何,聚簇,回表,索引,键值,SQL,解决 From: https://blog.csdn.net/m0_73473352/article/details/139160296