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

wqhuser 2014-08-14 06:17:57
在联合查询中,如:
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也一样吗?
...全文
237 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangdh12 2014-08-15
  • 打赏
  • 举报
回复
早起oracle 是有区别的。 所以要把限定条件越清晰的,能过滤越多数据的条件 放到越后面,但是 后面好像 已经没什么区别了。
sych888 2014-08-14
  • 打赏
  • 举报
回复
理论上是一致的,以执行计划为准
ghx287524027 2014-08-14
  • 打赏
  • 举报
回复
具体可通过查看执行计划观察每条语句的实际效率
美到心痛 2014-08-14
  • 打赏
  • 举报
回复
刚才我说的sqlserver的执行顺序是逻辑处理步骤,和实际好象不一样. 刚看了一个sqlserver的执行计划,它是先把A表过滤了,再和B做做nest loop. 所以具体还要看执行计划了
美到心痛 2014-08-14
  • 打赏
  • 举报
回复
对于你这两条语句,执行效率是一样的. 对于你这条语句,估计会先按查询条件过滤,之后再进行hash join的联合.看执行计划才是最准的. sqlserver 会先做交叉连接,然后根据链接条件筛选,然后根据where再进行筛选. mysql没注意过这方面. 不过对于复杂sql,里面有调用视图的,有遇到过,不同的顺序,CBO模式下,竟然也会执行效率不同,执行计划也不同.
bw555 2014-08-14
  • 打赏
  • 举报
回复
在早期的oracle还是有差异的,早期的oracle中where条件是固定从右向左执行的 但是随着oracle的发展,这种差异已经没有了,oracle可以自己选择一种最佳的执行方式 这两种写法目前效率应该是一样的,至于其他的数据库就不确定了
wqhuser 2014-08-14
  • 打赏
  • 举报
回复
新手上路,恳请帮忙,谢过

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧