WEB开发网
开发学院数据库Oracle Oracle数据库11g:SQL计划管理(三) 阅读

Oracle数据库11g:SQL计划管理(三)

 2008-09-04 12:50:18 来源:WEB开发网   
核心提示: 图3.1 SQL计划基线管理主面板这个接口使得可以不用任何复杂的PL/SQL代码就可以非常容易地执行下面的SPM功能:◆启用或禁用某个SQL计划基线◆为某个选中的SQL计划基线演变一个更好的计划◆删除一个现有的SQL计划基线◆打包某个SQL计划基线的内容进入某个临时表◆打开某个临时表到一个

Oracle数据库11g:SQL计划管理(三)

图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
;

上一页  1 2 3 4 5 6 

Tags:Oracle 数据库 SQL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接