譬如语句
select * from table_a join table_b on table_a.id=table_b.a_id and table_a.name='smith' join table_c where table_a.priority=3 and table_b.seq=8 and table_c.sales=1998;
在联表内嵌循环操作中,假如table_a是驱动表
1) table_a 根据on条件中的table_a.name='smith'过滤后的结果集做第一层循环集,依次类推,等到a,b,c联表后生成的临时表再针对where语句中的条件进行过滤
2) table_a 根据on条件中的table_a.name='smith'以及where条件中的table_a.priority=3过滤后的结果集第一层循环集,依次类推
其实就是理解on和where的执行顺序
哪种是对的?
mysql的理论依据没找到,个人理解是先执行where的过滤条件,先关联再过滤明显做的是无用功。
oracle中倒是能在执行计划中看到,先执行的是过滤条件(下面代码中最后一行)。