天道酬勤

Oracle and My Life

SQL的执行计划

leave a comment

今天有开发人员问怎么安装SQL的执行计划。配置方法不止一种,下面俺简单说一下方法:

第一种方法如下:

在sys用户下运行如下脚本:

SQL>@$ORACLE_HOME/sqlplus/admin/plustrce.sql;

在产生角色plustrace后在sys用户下把该角色授予一般用户username,

SQL>grant plustrace to username;

如果愿意,可以把grant命令中的username替换为public。

第二种方法如下:
在sys用户下运行如下脚本:

SQL>@$ORACLE_HOME/rdbms/admin/utlxplan.sql;

创建一个plan_table,用来存储分析SQL的结果

SQL>create public synonym plan_table for plan_table;
SQL>grant all on plan_table to public;

通过将plan_table设置为public,任何人都可以使用SQL*Plus来查看执行计划,同时也可以把grant to public中的public替换为某个username。

一些开关语句如下:

set time on|off 打开时间显示。

set timing on|off 打开显示执行的时间。

set autotrace on|off 打开自动分析,并显示SQL的运行结果。

set autotrace on statistics 按常规执行,只显示SQL的执行统计数据。

set autotrace on explain 按常规运行,只显示优化程序的执行情况。

set autotrace traceonly 打开自动分析统计,不显示SQL的运行结果。

set autotrace traceonly statistics
与set autotrace traceonly一样,不显示执行计划,只显示统计数据。

set autotrace traceonly explain
与set autotrace traceonly一样,不显示统计数据,只显示执行计划。它只对该查询进行分析和解释,INSERT、UPDATE、DELETE和MEGRE都用此方法,只有SELECTE 有所不同。

三、示例

SQL>set timing on
SQL>explain plan for
  2  select * from emp;
 
Explained.
 
Elapsed: 00:00:00.00
SQL>select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
 
--------------------------------------------------------------------
| Id  | Operation            |  Name       | Rows  | Bytes | Cost  |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT     |             |    14 |   518 |     7 |
|   1 |  TABLE ACCESS FULL   | EMP         |    14 |   518 |     7 |
--------------------------------------------------------------------
 
Note: cpu costing is off
 
9 rows selected.
 
Elapsed: 00:00:00.18
SQL>

btw:9i与10g的plan table是有区别的,小荷这里有更详细的测试。

Updated @ 02-04-09

Written by ochef

March 19th, 2009 at 1:55 pm

Posted in Database

Tagged with ,

Leave a Reply

无觅相关文章插件,快速提升流量