通过分析SQL语句的执行计划优化SQL(12)

ZDNet软件频道 时间:2009-11-17 作者:赛迪网 limeinan | 天新网 我要评论()
本文关键词:SQL Server Mssql SQL 数据库
要为一个语句生成执行计划,可以有3种方法。

要为一个语句生成执行计划,可以有3种方法:

1.最简单的办法

SQL> set autotrace on
SQL> select * from dual;

执行完语句后,会显示explain plan 与 统计信息。

这个语句的优点就是它的缺点,这样在用该方法查看执行时间较长的SQL语句时,需要等待该语句执行成功后,才返回执行计划,使优化的周期大大增长。

如果不想执行语句而只是想得到执行计划可以采用:

SQL> set autotrace traceonly

这样,就只会列出执行计划,而不会真正的执行语句,大大减少了优化时间。虽然也列出了统计信息,但是因为没有执行语句,所以该统计信息没有用处,

如果执行该语句时遇到错误,解决方法为:

(1)在要分析的用户下:
SQLplus > @ ?
dbmsadminutlxplan.SQL
(2) 用sys用户登陆
SQLplus > @ ?SQLplusadminplustrce.SQL
SQLplus > grant plustrace to user_name; 
 - - user_name是上面所说的分析用户

2.用explain plan命令

(1) SQLplus > @ ?
dbmsadminutlxplan.SQL
(2) SQLplus > explain plan set statement_id =’???’
for select ………………

注意,用此方法时,并不执行SQL语句,所以只会列出执行计划,不会列出统计信息,并且执行计划只存在plan_table中。所以该语句比起set autotrace traceonly可用性要差。需要用下面的命令格式化输出,所以这种方式我用的不多:

set linesize 150
set pagesize 500
col PLANLINE for a120
SELECT EXECORD EXEC_ORDER, PLANLINE 
FROM (SELECT PLANLINE, ROWNUM EXECORD, ID, RID 
FROM (SELECT PLANLINE, ID, RID, LEV 
FROM (SELECT lpad(" ",2*(LEVEL),rpad(" ",80,"     "))
||OPERATION||"  "||                 -- Operation 
DECODE(OPTIONS,NULL,"","("||OPTIONS || ") ")
||  -- Options 
DECODE(OBJECT_OWNER,null,"","OF """|| OBJECT_OWNER
||".")||  -- Owner 
DECODE(OBJECT_NAME,null,"",OBJECT_NAME|| """ ")
|| -- Object Name 
DECODE(OBJECT_TYPE,null,"","("||OBJECT_TYPE|| ") ")
||  -- Object Type 
DECODE(ID,0,"OPT_MODE:")||       -- Optimizer 
DECODE(OPTIMIZER,null,"","ANALYZED","", OPTIMIZER)|| 
DECODE(NVL(COST,0)+NVL(CARDINALITY,0)+NVL(BYTES,0), 
0,null," (COST="||TO_CHAR(COST)||",CARD="|| 
TO_CHAR(CARDINALITY)||",BYTES="||TO_CHAR(BYTES)||")") 
PLANLINE, ID, LEVEL LEV, 
(SELECT MAX(ID) 
FROM PLAN_TABLE PL2 
CONNECT BY PRIOR ID = PARENT_ID 
AND PRIOR STATEMENT_ID = STATEMENT_ID 
START WITH ID = PL1.ID 
AND STATEMENT_ID = PL1.STATEMENT_ID) RID 
FROM PLAN_TABLE PL1 
CONNECT BY PRIOR ID = PARENT_ID 
AND PRIOR STATEMENT_ID = STATEMENT_ID 
START WITH ID = 0 
AND STATEMENT_ID = "aaa") 
ORDER BY RID, -LEV)) 
ORDER BY ID;

SQL Server

Mssql

SQL

数据库


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134