首先先看一篇网上关于《回表及索引掩盖》介绍的文章,讲的很清楚:mysql掩盖索引与回表

示例1:
1.异地登录查询sql:

SELECTuuid,count(*)AScntFROMevents_xxxxlogin_202106WHEREappid=?ANDstatus=2GROUPBYuuid;

2.原始索引:
KEYidx_appid_status(appid,status),

优化索引,防止回表查询
优化索引,避免回表查询

3.优化后索引(添加uuid字段到联合索引索引超出矩阵维度中):

altertableevents_xxxxlogin_202106addkeyidx_appid_status_uuid(appid,status,uuid);

优化索引,避免回表查询

4.优化作用:

优化索引,防止回表查询
优化索引,避免回表查询

5.为啥加上这个索引就不需要回表???
由于目前该sql句子需要用到的字段有uuid、appid、status等,老版别的联合索引只有”idx_appid_status(apappetitepid,status)”这两个,所APP以用到umysql数据库基础知识uid分组时还需要经过”回表”去聚簇索引中查询uuid字mysql数据库段值。
但是一旦升级原先联合索引为idx_aappstoreppid_status_uuid(appid,uuidapproach,status)后,使用uuid字段时就无需再”回表”去聚簇索引中查询uuid字段了,一次遍历二级索引即可~
(索引掩盖:经过树立联合索引mysql基础命令,做到只需要在一棵索引树上就能获取SQL所需的一切列数据,无需回表,速度更快)

示例2:
sql句子报错示例(sql查询耗时约4秒)approve

SELECTquuid,COUNT(1)AScntFROMevents_xxxx WHEREappid=?ANDstatus=0GROUPBYquuid;

优化索引,防止回表查询
优化索引,避免回表查询
优化前无索引,优化后添加如下索引(防止回表):
优化索引,防止回表查询
优化索引,避免回表查询
优化作用(sql查询耗时约0.mysql密码忘记了怎么办42秒):
优化索引,防止回表查询
优化索引,避免回表查询