MySQL慢查询优化
2018-01-16| 程成| 1094| 0| MySQL

最近写接口在多表查询时,发现添加一些索引条件可以使你的 SQL 执行时间大大缩短。


原SQL(执行1.873s):

SELECT `表1别名`.`djbh` AS `ckd_djbh`, `表1别名`.`djrq`, `表3别名`.`djbh` AS `htd_djbh`, `表3别名`.`khmc` 
FROM `表1` `表1别名` 
LEFT JOIN `表2` `表2别名` ON 表2别名.xsckd_djbh = 表1.djbh 
LEFT JOIN `表3` `表3别名` ON 表3别名.djbh = 表2别名.xshtd_djbh 
WHERE (`表1别名`.`is_deleted`=0) 
AND (`表1别名`.`czyg_ygbh` IN ('xxxxxx', 'xxxxxx', 'xxxxxx', 'xxxxxx', 'xxxxxx')) 
GROUP BY `表1别名`.`djbh`



这里加上了一个条件:表2.id > 0,表2是张 2w 多条数据的表(执行时间0.08s

SELECT `表1别名`.`djbh` AS `ckd_djbh`, `表1别名`.`djrq`, `表3别名`.`djbh` AS `htd_djbh`, `表3别名`.`khmc` 
FROM `表1` `表1别名` 
LEFT JOIN `表2` `表2别名` ON 表2别名.xsckd_djbh = 表1.djbh 
LEFT JOIN `表3` `表3别名` ON 表3别名.djbh = 表2别名.xshtd_djbh 
WHERE (`表1别名`.`is_deleted`=0) 
AND (`表1别名`.`czyg_ygbh` IN ('xxxxxx', 'xxxxxx', 'xxxxxx', 'xxxxxx', 'xxxxxx'))
AND (`表2别名`.`id` > 0) 
GROUP BY `表1别名`.`djbh`



你可能会想,如果加上 "表1.id >0 && 表2.id >0 表3.id >0" 会不会更快点 ,执行时间是 1.95s 时间,惊不惊喜,意不意外。可以看出索引用的好是优化,用的不好的话。。会更加悲剧。如果有人知道原因,欢迎给我留言!



×
作者:程成
QQ:492245711