数据库(如:Oracle)中联合查询的机制解决方案

数据库(如:Oracle)中联合查询的机制
在联合查询中,如:
select * from tb_a a, tb_b b where a.id=b.id and a.flag=1 


select * from tb_a a, tb_b b where a.flag=1 and a.id=b.id

当两个表的数据量很大时,两个语句的执行效率相同吗?
两个表是先联合,还是先查询?
其他数据库,如:SQL SERVER、MySQL也一样吗?
------解决方案--------------------
在早期的oracle还是有差异的,早期的oracle中where条件是固定从右向左执行的
但是随着oracle的发展,这种差异已经没有了,oracle可以自己选择一种最佳的执行方式
这两种写法目前效率应该是一样的,至于其他的数据库就不确定了
------解决方案--------------------
对于你这两条语句,执行效率是一样的.
对于你这条语句,估计会先按查询条件过滤,之后再进行hash join的联合.看执行计划才是最准的.

sqlserver 会先做交叉连接,然后根据链接条件筛选,然后根据where再进行筛选.
mysql没注意过这方面.

不过对于复杂sql,里面有调用视图的,有遇到过,不同的顺序,CBO模式下,竟然也会执行效率不同,执行计划也不同.
------解决方案--------------------
刚才我说的sqlserver的执行顺序是逻辑处理步骤,和实际好象不一样.
刚看了一个sqlserver的执行计划,它是先把A表过滤了,再和B做做nest loop.
所以具体还要看执行计划了
------解决方案--------------------
早起oracle 是有区别的。 所以要把限定条件越清晰的,能过滤越多数据的条件 放到越后面,但是 后面好像 已经没什么区别了。