优化索引,避免回表查询
首先先看一篇网上关于《回表及索引掩盖》介绍的文章,讲的很清楚: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);
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;