碰到一个 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。
执行计划如下
由此问题解决。
SQL查询优化实践
本文介绍了一个具体的SQL查询优化案例,通过调整JOIN类型和统一字符集编码格式,显著提高了查询效率。从左连接(left join)调整为内连接(inner join),并确保连接字段的字符集一致,最终将查询时间从接近100秒优化到不足1秒。
1452

被折叠的 条评论
为什么被折叠?



