稳固执行计划
①创建大纲
create or replace outline outln_t1 for category category_t1 on select * from t1 where id=1;
alter system set use_stored_outlines=category_t1; --激活一个类目的存储大纲 --select sql_id,hash_value,child_number from v$sql where sql_text like 'select * from t1 where id=1;%'; --exec dbms_outln.create_outline(sql_id,'DEFAULT'); --通过过程创建 select category,ol_name,hintcount hints,sql_text from outln.ol$;
②将现有OUTLINE复制到新建的私有的OUTLINE中去 –1.当前会话下修改不影响其它会话,2.已存在outline需要修改时
create private outline prv_ol_t1 from outln_t1;
(福利推荐:阿里云、腾讯云、华为云服务器最新限时优惠活动,云服务器1核2G仅88元/年、2核4G仅698元/3年,点击这里立即抢购>>>)
create private outline prv_ol_temp on select /*+ full(t1) */ * from t1 where id=1;--用提示生成一个全表扫描计划
③修改大纲(可以使用dbms_outln_edit包中所提供的过程进行修改或直接修改ol$hints)
SQL> select category,ol_name,hintcount hints,sql_text from outln.ol$; --公有大纲的提示数量 SQL> select ol_name,hint_text from outln.ol$hints; --公有大纲的提示内容 SQL> select category,ol_name,hintcount hints,sql_text from ol$; --私有大纲的提示数量
SQL> select ol_name,hint_text from ol$hints; –私有大纲的提示内容
OL_NAME HINT_TEXT
—————————— ————————-
PRV_OL_T1 OUTLINE_LEAF(@”SEL$1″)
PRV_OL_T1 IGNORE_OPTIM_EMBEDDED_HINTS
PRV_OL_T1 OPTIMIZER_FEATURES_ENABLE(‘11.2.0.3’)
PRV_OL_T1 DB_VERSION(‘11.2.0.3’)
PRV_OL_T1 ALL_ROWS
PRV_OL_T1 INDEX_RS_ASC(@”SEL$1″ “T1″@”SEL$1” (“T1″.”ID”))
PRV_OL_TEMP FULL(@”SEL$1″ “T1″@”SEL$1”)
PRV_OL_TEMP OUTLINE_LEAF(@”SEL$1″)
PRV_OL_TEMP ALL_ROWS
PRV_OL_TEMP DB_VERSION(‘11.2.0.3’)
PRV_OL_TEMP OPTIMIZER_FEATURES_ENABLE(‘11.2.0.3’)
PRV_OL_TEMP IGNORE_OPTIM_EMBEDDED_HINTS
–直接修改ol$hints(私有大纲的提示内容)
UPDATE ol$hints SET ol_name=DECODE(OL_NAME,'PRV_OL_T1','PRV_OL_TEMP','PRV_OL_TEMP','PRV_OL_T1') WHERE ol_name IN ('PRV_OL_T1','PRV_OL_TEMP'); --直接修改ol$hints(私有大纲的提示数量) UPDATE ol$ ol1 SET hintcount=(SELECT hintcount FROM ol$ ol2 WHERE ol2.ol_name IN ('PRV_OL_T1','PRV_OL_TEMP') AND ol2.ol_name != ol1.ol_name) WHERE ol1.ol_name IN ('PRV_OL_T1','PRV_OL_TEMP');
④在修改之后必须使用refresh_private_outline过程对上述私有outline进行刷新
EXEC DBMS_OUTLN_EDIT.REFRESH_PRIVATE_OUTLINE ('PRV_OL_T1');
⑤为了对创建的私有OUTLINE进行检查而需要将参数use_private_outlines设置为true
alter session set use_private_outlines=true;
⑥在充分的检查结束后,能过执行下面的操作来达到共享使用的目的
create or replace outline outln_t1 from private PRV_OL_T1;
⑦在共享使用转换结束后,通过将参数use_private_outlines设置为false来结束修改之前的私有outline的执行
alter session set use_private_outlines=false;
⑧OUTLINE的观察:dba_outlines、dba_outline_hints
select hint from dba_outline_hints where name='OUTLN_T1';
你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧:
相关文章
- 基于Python的人脸识别考勤监控
- Python答题游戏
- Python调用百度API实现图像识别
- Python全栈疫情分析项目
- Python-基础-if语句快速入门
- Python-基础-循环语句快速入门
- Python-GUI签名
- 【2】VScode 搭建python和tensorflow环境
- python 简易时钟
- 【1】windows系统如何安装后缀是whl的python库
- 【2】超级详细Python-matplotlib画图,手把手教你画图!(线条颜色、大小、线形、标签)
- 【4】python读写文件操作---详细讲解!
- 【2】Anaconda下:ipython文件的打开方式,Jupyter Notebook中运行.py文件,快速打开ipython文件的方法!
- 【编写环境一】遇到常见python函数处理方式
- 【编写环境二】python库scipy.stats各种分布函数生成、以及随机数生成【泊松分布、正态分布等】
- Python xlwt数据保存到 Excel中以及xlrd读取excel文件画图
- 强化学习技巧三:Python多进程
- 强化学习技巧五:numba提速python程序
- 【7】python_matplotlib 输出(保存)矢量图方法;画图时图例说明(legend)放到图像外侧;Python_matplotlib图例放在外侧保存时显示不完整问题解决
- 【8】python_matplotlib改变横坐标和纵坐标上的刻度(ticks)、sagemath-list_plot()调整图例(legend)中点的数量、Matplotlib画各种论文图