left join 查询慢

来源:互联网 发布:宁化老鼠干 知乎 编辑:程序博客网 时间:2024/06/11 16:48

碰到一个 sql


SELECT
    kcd.id,
kcd.importTime,
kcd.phone,
wou.realName workOrderUserName,
IF (os.studentId IS NULL, '否', '是') isSuccess,
FROM_UNIXTIME(os.payTime) payTime
FROM
coaches.kf_customer_db kcd
left   join coaches.User_student us ON kcd.phone = us.phone


发现执行效率 慢的惊人。 kf_customer_db  这张表有3w+的数据,User_student 这张表有30w的数据。查询下来一趟将近100s 以上


但是将 left      join 转为  inner join 后  ,几乎都是秒查 效率在1s以内。

这巨大的差异 ,让我想起来 explain。


执行一下 发现 left join 的 查询计划  


而 inner join 的查询计划



观察 rowd  的值,差距好大。

然后google left join 慢 

参考 

http://luxuryzh.iteye.com/blog/1976004 这篇 博客,发现自己的两个 phone的 字符集编码格式不一样。一个是uft-8,一个是 latin1。


最后将两者改为 latin1。发现问题解决。


执行效率,不到1s。


执行计划如下




由此问题解决。