oracle中SQL语句的执行顺序

shdcsdn 2005-11-28 02:14:27
select t1.a ,t2.b
from t1 ,t2
where t1.a = t2.b and t1.a=变量a

SQL语句的执行顺序是先执行t1.a = t2.b 再执行t1.a=变量a 吗?

谢谢!
...全文
281 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
z317768 2005-11-29
  • 打赏
  • 举报
回复
呵呵,我还一直以为是从左到右的呢
geigers 2005-11-29
  • 打赏
  • 举报
回复
准确的讲,好像sql92是从左到右的,但是从sql99开始,好像就变成从右到左了。
geigers 2005-11-28
  • 打赏
  • 举报
回复
这绝不是个简单的问题,sql的优化有时和它有莫大的干系,赫赫,itpub的新书上老大们写的sql语句偶尔也是会犯这个错误的,需要把where字句的顺序换一下的.
mayongzhi 2005-11-28
  • 打赏
  • 举报
回复
告诉楼主一个简单方法
你将两个条件都故意写错,然后看那个地方先报错,就是先执行那个条件了。
如where t1.aaa = t2.b and t1.aaaa=变量a
waterfirer 2005-11-28
  • 打赏
  • 举报
回复
如果使用基于成本的优化器cost , 你必须经常运行analyze 命令,以增加数据库中的对象统计信息的准确性
waterfirer 2005-11-28
  • 打赏
  • 举报
回复
如果优化器模式设置为choose,Oracle将根据SQL语句相关表索引的有无,统计资料的有无以及SQL语句中的提示,自动判断使用哪种优化模式
shdcsdn 2005-11-28
  • 打赏
  • 举报
回复
从右向左的顺序,不是只在基于规则的优化器中有效吗?
我们的查询不都是基于成本的吗?

现在很多人来解答这个简单的问题
真是谢谢了!
waterfirer 2005-11-28
  • 打赏
  • 举报
回复
嗯。

有索引时,系统会对SQL语句优化,看看执行计划。
anruky 2005-11-28
  • 打赏
  • 举报
回复
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.
例如:
(低效,执行时间156.3秒)
SELECT ... FROM EMP E
WHERE SAL > 50000 AND JOB = ‘MANAGER' AND 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO);

(高效,执行时间10.6秒)
SELECT … FROM EMP E
WHERE 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO) AND SAL > 50000 AND JOB = ‘MANAGER';

anruky 2005-11-28
  • 打赏
  • 举报
回复
shdcsdn 2005-11-28
  • 打赏
  • 举报
回复
我一直都是认为从右到左,
就是说t1.a=变量a检索到一仆结果集
再进行t1.a = t2.b的连结
应该是这样的吧?
waterfirer 2005-11-28
  • 打赏
  • 举报
回复
从右到左。
btw:楼主的语句好奇怪,要查什么?

17,081

社区成员

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

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