优化器会自动的在内部进行调节,你不需要关心.原则:他是按照每页4KB的随即读取的开销来选择最低消耗的一个执行计划,然后去执行.要是你一定要调整他,按照自己要求的顺序去读取的话,则在select 后面直接加 :straight_join 关键字
去指定你自己规定的顺序.

解决方案 »

  1.   

    首先要明白sql的具体的执行顺序。然后具体的执行计划。
      

  2.   

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

  3.   

    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的记录。 
      

  4.   

    没有指定join顺序,mysql优化器会自己判断join顺序
    1.如果有where条件,满足条件记录少的表为驱动表
    2.没有where,行数少的表为驱动表可通过explain查看,在前面的为驱动表