技术CTO-关注编程入门知识,提供编程入门教程

您的位置: 首页 > 数据库 > mysql > 正文

mysql left join 效率优化问题

来源: 技术CTO 阅读:

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多次)的循环次数

在C表上创建 no 列的索引。
已经有索引了,执行计划中的最下面一行 device_id 就是索引名称。
引用 1 楼 ACMAIN_CHM 的回复:
在C表上创建 no 列的索引。
如果id,no都是索引的话,没理由这么慢。
并且 a left join c,a表1500+数据,也就1500条循环,哪来的6w条循环啊
left join 小表驱动大表啊

^_^ 如果您热爱技术、热爱编程,想与更多的朋友一起交流学习,欢迎加入本站官方QQ群:345733473 ^_^