left join 左表5000多条数据右表6000多数据,查出的结果集是8000多条。但耗时竟然是30s左右??
left join 左表5000多条数据右表6000多数据,查出的结果集是8000多条。但耗时竟然是30s左右??
怎么排查啊?
我来答
添加附件
收藏
复制链接
微信扫码分享
在小程序上查看
分享
添加附件
问题补充
11条回答
默认
最新
可以使用show profiles 查看历史的sql命令,然后通过show profile for query id 命令得到该sql语句在每一步骤中的时间。**因此如果某一个sql语句运行时间特别长,我们可以通过该条命令来排查究竟在哪一个步骤中的耗时最长。
评论
有用 1
explain一下执行计划,在关联字段上看是否用到了索引,另外在where条件上看是否用到了索引。在以上确认都没问题的情况下,再确认一下join-buffer 是否设置过低,是否查询了大字段等。
评论
有用 0【解决方案1】:
LEFT JOIN 比 Inner Join 慢。根据定义,外连接(LEFT JOIN 或RIGHT JOIN)必须完成INNER JOIN 的所有工作以及对结果进行空值扩展的额外工作,这就是原因。并且与内部联接相比,它还返回更多行数,这就是执行需要更多时间的原因。 但是通过正确地索引 外键,您绝对可以提高连接的性能。
这也取决于数据,Left join 并不总是较慢,也有 Left join 较快的情况,但根据上述原因,大多数 Inner join 较快。 请参考这个link,这家伙解释的很清楚。
【解决方案2】:
外部联接(LEFT JOIN 或 RIGHT JOIN)必须完成 INNER JOIN 的所有工作以及空扩展结果的额外工作
即使 LEFT JOIN 在特定情况下更快,它在功能上并不等同于 INNER JOIN,因此您不能简单地将一个实例的所有实例替换为另一个实例!
评论
有用 0回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏


