执行计划之EXPLAIN-oracle基础讲义

时间:2024-05-12 07:15:54
【文件属性】:

文件名称:执行计划之EXPLAIN-oracle基础讲义

文件大小:4.17MB

文件格式:PPT

更新时间:2024-05-12 07:15:54

orcle基础讲义

执行计划之EXPLAIN Explain可以用来迅速方便地查出对于给定SQL语句中的查询数据是如何得到的即搜索路径(我们通常称为Access Path)。从而使我们选择最优的查询方式达到最大的优化效果。 常规使用语法: explain PLAN [ SET STATEMENT_ID [=] < string literal > ] [ INTO < table_name > ] FOR < sql_statement > 其中: STATEMENT_ID:是一个唯一的字符串,把当前执行计划与存储在同一PLAN中的其它执行计划区别开来。 TABLE_NAME:是plan表名,它结构如前所示,你可以任意设定这个名称。 SQL_STATEMENT:是真正的SQL语句。 安 装                                                                                                                         要使用EXPLAIN首先要执行相应的脚本,创建出Explain_plan表。 具体脚本执行如下:    $ORACLE_HOME/rdbms/admin/utlxplan.sql (UNIX)  该脚本后会生成一个表这个程序会创建一个名为plan_table的表。 授 权 SQL> grant all on plan_table to public;--授权所有用户 举例:                                                                                                                 SQL>explain plan set statement_id='T_TEST' for select * from t_test;              SQL> Explained 执行下面语句可以查询到执行计划 SQL>SELECT A.OPERATION,OPTIONS,OBJECT_NAME,OBJECT_TYPE,ID,PARENT_ID   2  FROM PLAN_TABLE  a   3  WHERE STATEMENT_ID='T_TEST'   4  ORDER BY Id; 也可以用这句话 select * from table(dbms_xplan.display); 可以把所有PLAN_TABLE里的数据罗列出来。 如: Execution Plan ----------------------------------------------------------    0      SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=1 Bytes=110)    1    0   SORT (AGGREGATE)    2    1     NESTED LOOPS (Cost=6 Card=1 Bytes=110)    3    2       MERGE JOIN (CARTESIAN) (Cost=4 Card=1 Bytes=74)    4    3         TABLE ACCESS (FULL) OF 'TB_LVY_SBZS100' (Cost=2 Card =1 Bytes=31)    5    3         BUFFER (SORT) (Cost=2 Card=1 Bytes=43)    6    5           TABLE ACCESS (FULL) OF 'TB_LVY_DECLAREDOC' (Cost=2 Card=1 Bytes=43)    7    2       TABLE ACCESS (BY INDEX ROWID) OF 'TB_LVY_DECLAREDOC' (Cost=2 Card=1 Bytes=36)    8    7         INDEX (UNIQUE SCAN) OF 'TBLVYDECLAREDOC_DECLAREDOCID' (UNIQUE) Statistics ----------------------------------------------------------           0  recursive calls --循环递归次数           0  db block gets―请求的数据块在buffer能满足的个数        6675  consistent gets --逻辑IO用于读表并计算行数, 数据请求总数在回滚段Buffer中          45  physical reads �C从磁盘读到Buffer Cache数据块数量           0  redo size �C产生的redo日志大小         217  bytes sent via SQL*Net to client         276  bytes received via SQL*Net from client           2  SQL*Net roundtrips to/from client           1  sorts (memory)           0  sorts (disk)           1  rows processed *


网友评论