碰到一个 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。
执行计划如下
由此问题解决。