待执行的SQL语句进入数据库系统后都会进入查询优化器进行查询转换.
在Oracle 10g之前, Oracle会默认使用RBO规则
数据库会将查询条件分成15个等级, 通过判断条件(动作)的级别高低来决定那个谓词被优先执行
例如 基于rowid的查询级别是最高的为1, 全表扫描的执行级别最低为15
基于RBO优化器的一个明显缺点在于, 依靠硬编码来确定的规则很难被动态改变, 编写SQL语句的时候需要十分注意
这里如果你跟我一样使用的是10g之后的版本,我们需要使用下面的命令将优化器暂时改成RBO ( 只对当前session有效,不用再改回来)
alter session set optimizer_mode=’RULE’;
然后我执行一个执行计划
EXPLAIN PLAN FOR select * from INO_OUTAGES.OUTAGE where SUBCATEGORY=’NBN Outage’;
SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY(‘PLAN_TABLE’));

explain plan for select * from INO_SCHEDULING.IS_COMMANDS;
select * from table(dbms_xplan.display);
