Oracle数据库11g:SQL计划管理(三)
2008-09-04 12:50:18 来源:WEB开发网图3.1 SQL计划基线管理主面板
这个接口使得可以不用任何复杂的PL/SQL代码就可以非常容易地执行下面的SPM功能:
◆启用或禁用某个SQL计划基线
◆为某个选中的SQL计划基线演变一个更好的计划
◆删除一个现有的SQL计划基线
◆打包某个SQL计划基线的内容进入某个临时表
◆打开某个临时表到一个SQL计划基线
图3.1中的例子说明,限制这个屏幕上显示的SQL计划基线列表也是可能的。
结论
这一系列的文章足以说明Oracle 11g的SQL计划管理(SPM)新特性为Oracle DBA提供了一个保证SQL语句能访问绝对最佳的执行计划的强大工具,同时,在SQL语句正式进入生产环境之前,提供了一个稳定其性能的机会,SQL计划基线可以从多个源捕获 -- 甚至从现有的Oracle 10g数据库 -- 可以为新应用程序预先载入以减轻潜在的崩溃可能,使得部署顺利进行,最后,SPM提供了几个方法影响SQL计划基线,基于成本的优化器将为每条独立的SQL语句选择最佳的执行计划,维护当前的SQL计划基线列表,以及自动或手动清除不再使用的SQL计划基线。
SPM_3_1:
-----
-- Query: SPM_3_1.sql
-----
VARIABLE cust_last_name VARchar2(30);
VARIABLE beg_prod_id NUMBER;
VARIABLE end_prod_id NUMBER;
BEGIN
:cust_last_name := ’Sand%’;
:beg_prod_id := 100;
:end_prod_id := 500;
END;
/
PRINT :cust_last_name :beg_prod_id :end_prod_id
select /*SPM_3.1*/
S.cust_id
,C.cust_last_name
,S.prod_id
,P.prod_name
,SUM(S.amount_sold)
,SUM(S.quantity_sold)
FROM
sh.sales S
,sh.customers C
,sh.products P
where S.cust_id = C.cust_id
AND S.prod_id = P.prod_id
AND S.prod_id BETWEEN :beg_prod_id AND :end_prod_id
AND C.cust_last_name like :cust_last_name
GROUP BY
S.cust_id
,C.cust_last_name
,S.prod_id
,P.prod_name
ORDER BY
S.cust_id
,C.cust_last_name
,S.prod_id
,P.prod_name
;
SPM_3_2:
-----
-- Query: SPM_3_2.1
-- Optimizer will use "star transformation" method to retrieve a
-- smaller subset more efficiently
-----
select /*SPM_3_2.1*/
S.cust_id
,C.cust_last_name
,S.prod_id
,P.prod_name
,S.amount_sold
,S.quantity_sold
FROM
sh.sales S
,sh.customers C
,sh.products P
where S.cust_id = C.cust_id
AND S.prod_id = P.prod_id
AND S.prod_id BETWEEN 100 AND 500
AND C.cust_last_name like ’Sand%’
ORDER BY
S.cust_id
,C.cust_last_name
,S.prod_id
,P.prod_name
;
-----
-- Query: SPM_3_2.2
-- Optimizer will choose a full table scan of SH.CUSTOMERS because of the larger
-- subset of data that’s retrieved
-----
select /*SPM_3_2.2*/
S.cust_id
,C.cust_last_name
,S.prod_id
,P.prod_name
,S.amount_sold
,S.quantity_sold
FROM
sh.sales S
,sh.customers C
,sh.products P
where S.cust_id = C.cust_id
AND S.prod_id = P.prod_id
AND S.prod_id BETWEEN 0 AND 99999
AND C.cust_last_name like ’Zil%’
ORDER BY
S.cust_id
,C.cust_last_name
,S.prod_id
,P.prod_name
;
-----
-- Query: SPM_3_2.3
-- Optimizer will still choose a full table scan of SH.CUSTOMERS but
-- return an even larger result set
-----
select /*SPM_3_2.3*/
S.cust_id
,C.cust_last_name
,S.prod_id
,P.prod_name
,S.amount_sold
,S.quantity_sold
FROM
sh.sales S
,sh.customers C
,sh.products P
where S.cust_id = C.cust_id
AND S.prod_id = P.prod_id
AND S.prod_id BETWEEN 0 AND 99999
AND C.cust_last_name like ’S%’
ORDER BY
S.cust_id
,C.cust_last_name
,S.prod_id
,P.prod_name
;
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
更多精彩
赞助商链接