您的位置:首页 > 数据库 > Oracle

ORACLE中查看SQL执行计划的方法

2009-10-28 17:28 731 查看
 1.首先需要建立plan table,否则不能使用
建立方法:

$oracle/rdbms/admin下有个
utlxplan.sql
其内容为:

create table PLAN_TABLE (
 statement_id  varchar2(30),
 timestamp     date,
 remarks       varchar2(80),
 operation     varchar2(30),
 options        varchar2(255),
 object_node   varchar2(128),
 object_owner  varchar2(30),
 object_name   varchar2(30),
 object_instance numeric,
 object_type     varchar2(30),
 optimizer       varchar2(255),
 search_columns  number,
 id  numeric,
 parent_id numeric,
 position numeric,
 cost  numeric,
 cardinality numeric,
 bytes  numeric,
 other_tag       varchar2(255),
 partition_start varchar2(255),
        partition_stop  varchar2(255),
        partition_id    numeric,
 other  long,
 distribution    varchar2(30),
 cpu_cost numeric,
 io_cost  numeric,
 temp_space numeric,
        access_predicates varchar2(4000),
        filter_predicates varchar2(4000));

运行此SQL
SQL>$ORACLE/rdbms/admin/utlxplan.sql

2.使用explain plan for语句进行执行计划分析

SQL> explain plan for
  2  select * from dual;

已解释。

出现上述结果,表明分析完毕,可以查看

3.可以查看执行计划了
select * from table(DBMS_XPLAN.display);

--------------------------------------------------------------------
| Id  | Operation            |  Name       | Rows  | Bytes | Cost  |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT     |             |       |       |       |
|   1 |  TABLE ACCESS FULL   | DUAL        |       |       |       |
--------------------------------------------------------------------

Note: rule based optimization

 

 

 

 

 

 

explain plan for select sno from stutab where age <20;

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------

--------------------------------------------------------------------
| Id  | Operation            |  Name       | Rows  | Bytes | Cost  |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT     |             |       |       |       |
|*  1 |  TABLE ACCESS FULL   | STUTAB      |       |       |       |
--------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------
   1 - filter("STUTAB"."AGE"<20)

 

===============
not null不会自动建立索引,只有PK主键才会自动建立索引
除非手动建立索引

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息