暂无图片
left join 左表5000多条数据右表6000多数据,查出的结果集是8000多条。但耗时竟然是30s左右??
我来答
分享
枫神
2022-12-06
left join 左表5000多条数据右表6000多数据,查出的结果集是8000多条。但耗时竟然是30s左右??

left join 左表5000多条数据右表6000多数据,查出的结果集是8000多条。但耗时竟然是30s左右??

怎么排查啊?

我来答
添加附件
收藏
分享
问题补充
11条回答
默认
最新
zhangyfr

可以使用show profiles 查看历史的sql命令,然后通过show profile for query id 命令得到该sql语句在每一步骤中的时间。**因此如果某一个sql语句运行时间特别长,我们可以通过该条命令来排查究竟在哪一个步骤中的耗时最长。

暂无图片 评论
暂无图片 有用 1
暂无图片
游湖
2022-12-06
zy
2022-12-06
枫神
题主
2022-12-06
这个不行,没搞定,show profiles 返回空
yBmZlQzJ

路过,学习~

暂无图片 评论
暂无图片 有用 3
游湖

肯定是先分析执行计划。再分析profile

暂无图片 评论
暂无图片 有用 2
游湖
答主
2022-12-06
枫神
题主
2022-12-06
👌
A琳琳

暂无图片 评论
暂无图片 有用 0
魔天伦傻逼

赞,跟着学习

暂无图片 评论
暂无图片 有用 0
飞鸟

explain一下执行计划,在关联字段上看是否用到了索引,另外在where条件上看是否用到了索引。在以上确认都没问题的情况下,再确认一下join-buffer 是否设置过低,是否查询了大字段等。

暂无图片 评论
暂无图片 有用 0
shunwahⓂ️

【解决方案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
枫神

up

暂无图片 评论
暂无图片 有用 0
张sir

拿出执行计划来看看

暂无图片 评论
暂无图片 有用 0
游湖

mark

暂无图片 评论
暂无图片 有用 1
yBmZlQzJ

mark

暂无图片 评论
暂无图片 有用 3
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏