是我作 我就去看oracle sql语句的执行机会 sqlplus 下面打 set auotrace on 就可以看执行计划了 不过看懂要去看些参考书
explain plan显示是执行索引的步骤吧.我想看所有条件的执行过程
谢了。用到联合索引(a,b)时,如果条件走的是a,c,是不是就不走索引了?这样能用到索引
在语句执行过程中系统会自动使用已有的索引, 当然如果你不想让系统使用索引,可以自己来控制, 比如:id上有索引,不想让系统用:select * from tablename where id+0=5
转: WHERE子句中的连接顺序. 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’;
我问一下,在一个where条件里的执行顺序是怎样的。 是不是从左到右。 就象下面的代码,我怕万一它也是反的就需要改顺序了。 WHERE ... AND (AAA IS NULL OR A.B = AAA)
sqlplus 下面打 set auotrace on 就可以看执行计划了 不过看懂要去看些参考书
WHERE子句中的连接顺序.
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’;
是不是从左到右。
就象下面的代码,我怕万一它也是反的就需要改顺序了。
WHERE ...
AND (AAA IS NULL OR A.B = AAA)