日期:2014-05-16  浏览次数:20687 次

mysql联接优化器是如何优化join顺序的?
书上说left join, 与right join的联接顺序是固定的

但是对于inner join会自动调整联接顺序, 这个书上没说明白, 我很不理解这个调整联接顺序的依据是什么, 是根据什么原则来确认表的使用顺序?


谢谢大家


------解决方案--------------------
优化器会自动的在内部进行调节,你不需要关心.

原则:他是按照每页4KB的随即读取的开销来选择最低消耗的一个执行计划,然后去执行.

要是你一定要调整他,按照自己要求的顺序去读取的话,则在select 后面直接加 :straight_join 关键字
去指定你自己规定的顺序.
------解决方案--------------------
from A inner join B on A.id=B.id
where b.value=10

这种情况下,换成你自己手工操作,也会先从B表中找出 .value=10 的记录,比如只有10条符合条件,然后再以这 10条B中的记录去A表中逐一找出 A.id=B.id的记录。
------解决方案--------------------
探讨

但是我很困惑, 如果我不能理解mysql是基于什么原则调整联接顺序, 那么我就无法判断mysql是否使用的是最佳顺序, 并且自行调节为最佳顺序