可以用存储在OUTLN方案的公共大纲或者存储在本方案的私有大纲来稳定某些SQL语句的执行计划,这样这些语句的执行计划就不会因为统计数据或者会话优化模式的改变而发生改变。
当SQL语句执行时,ORACLE确定执行计划是按下面的顺序进行的:
前面三种情形下都有现成的执行计划。
[@more@]--设置环境变量
--alter system set query_rewrite_enabled = true;
alter system set use_stored_outlines = true;
CREATE OR REPLACE OUTLINE OL0 ON
SELECT ... FROM t1b,t2 a WHERE ... AND b.report_date BETWEEN TO_DATE(:beginDate,'yyyy-mm-dd hh24:mi:ss') AND TO_DATE(:endDate,'yyyy-mm-dd hh24:mi:ss') group by ...;
CREATE OR REPLACE OUTLINE OL1 ON
SELECT /*+ index (a) */ ... FROM t1b,t2 a WHERE ... AND b.report_date BETWEEN TO_DATE(:beginDate,'yyyy-mm-dd hh24:mi:ss') AND TO_DATE(:endDate,'yyyy-mm-dd hh24:mi:ss') group by ...;--以sys登陆
UPDATE OUTLN.OL$HINTS SET OL_NAME=DECODE(OL_NAME,'OL1','OL0', 'OL0','OL1') WHERE OL_NAME IN ('OL0','OL1');
--返回原来的用户
DROP OUTLINE OL1;
select * from OUTLN.OL$HINTS;select * from user_outlines ;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12402/viewspace-897385/ ,如需转载,请注明出处,否则将追究法律责任。