这是mysql sql优化分享第2篇,大家都很崇尚mysql的一个强大分支percona,真该跟风吗?
有些时候,还是原配靠谱,小三不一定给力。我们先看下sar报告:明显地,cpu %idle 非常低,粗大事了。我们的告警邮件里显示,单条sql执行时间长达 300秒左右。
原始sql非常长,这里就不贴了,但要表述的一个优化技巧是,优化的第一步,就是格式化 sql :-)
我们看下问题sql的问题部分:
?
1
2
3
4
5
6
7
left outer join `yy_game_info` `game` on (`t`.`game_code`=`game`.`game_code`)
left outer join `yy_company_list` `corp` on (`t`.`company_id`=`corp`.`company_id`)
left outer join `yy_sp_game_rel` `sp` on (`t`.`sp_id`=`sp`.`sp_id`
and `t`.`game_code`=`sp`.`game_code`)
where (((t.game_code=game.game_code)
and (t.company_id=corp.company_id))
and (corp.is_open=1))
虽然在mysql中,过滤器on和过滤器where的用法不同,但原则上我们不允许出现条件重复
但我们到主库执行,发现驱动表竟然走全表扫,郁闷。
查看版本时,我们发现:
备库的版本:5.5.22-log (mysql原版)
这也引出一个问题,复制环境的主备版本最好一致,至少可以减少dba troshoting的成本
看到了吧,小三未必盖得过原配
good luck!