mysql left join 效率优化问题

昊月星辰 2016-04-18 03:58:31
a,b,c三个表
a,b表1500+数据
c表6W数据

select a.id
from a
left join b on b.a_id=a.id
left join c on b.no = c.no

就这么简单的查询接近9S

1 SIMPLE a index id 4 1525 Using index
1 SIMPLE b index card_no 156 1617 Using where; Using index; Using join buffer (Block Nested Loop)
1 SIMPLE c index device_id 142 61007 Using where; Using index; Using join buffer (Block Nested Loop)

参考手册中MySQL如何优化LEFT JOIN和RIGHT JOIN——看了也没明白,还不是很懂

比如:在left join c on b.no = c.no and DATE_FORMAT(c.create_date, '%Y-%m-%d') = DATE_FORMAT(now(), '%Y-%m-%d')
也没效果。

求明白人指点该如何提高查询速度,求告知如何设置 减少最内层(c表6W多次)的循环次数
...全文
419 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
herofour444 2016-04-20
  • 打赏
  • 举报
回复
并且 a left join c,a表1500+数据,也就1500条循环,哪来的6w条循环啊
herofour444 2016-04-20
  • 打赏
  • 举报
回复
如果id,no都是索引的话,没理由这么慢。
九月茅 2016-04-20
  • 打赏
  • 举报
回复
left join 小表驱动大表啊
昊月星辰 2016-04-18
  • 打赏
  • 举报
回复
已经有索引了,执行计划中的最下面一行 device_id 就是索引名称。
引用 1 楼 ACMAIN_CHM 的回复:
在C表上创建 no 列的索引。
ACMAIN_CHM 2016-04-18
  • 打赏
  • 举报
回复
在C表上创建 no 列的索引。

56,878

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧