oracle创建计划在哪里,ORACLE执行计划

本文介绍了如何查看SQL语句的执行计划,包括创建Plustrace角色、建立存储执行计划的plan_table表以及设置SQL命令窗口的相关参数来显示执行计划。通过设置autotrace,可以在执行SQL时获取其执行计划和统计信息,帮助优化数据库查询性能。
摘要由CSDN通过智能技术生成

1.什么叫做执行计划?一个SQL语句表示你想要从中得到的结果,但是数据库服务器收到这条SQL的时候,一开始并不是马上解析它,如果这条SQL没有语法错误,数据库服务器才会继续工作,并且选择最好的计算方式,如果你是查询一张表的话,服务器会选择一下是读取整张表呢还是利用索引,那种执行效率好就会选择哪种!最终SQL语句被物理性执行的方法被称作执行计划!

一个执行计划由若干基本操作组成,负责处理或计算出最优的执行计划的DB 组件叫做优化器,优化器是建立在其所在的DB资源的基础上进行工作的。

数据库服务器在执行SQL语句之前会定制几套执行计划!看哪个执行计划消耗的系统资源少就用哪套执行计划!被数据库服务器执行的那套执行计划就叫做SQL语句的执行计划!

2.不借助第三方工具,怎样查看SQL的执行计划?

首先,创建一个叫做Plustrace的角色,具体创建过程如下:

因为我的装在E盘下,所以在路径E:\oracle\product\10.1.0\Db_1\sqlplus\admin的目录下找到plustrce.sql文件,文件内容自己可以以记事本的方式打开看。然后以员的身份登录到SQL命令窗口,在命令窗口运行该文件 SQL> @ E:\oracle\product\10.1.0\Db_1\sqlplus\admin\plustrce.sql 效果如下:

SQL> drop role plustrace;

角色已删除。

SQL> create role plustrace;

角色已创建。

SQL>

SQL> grant select on v_$sesstat to plustrace;

授权成功。

SQL> grant select on v_$statname to plustrace;

授权成功。

SQL> grant select on v_$mystat to plustrace;

授权成功。

SQL> grant plustrace to dba with admin option;

授权成功。

SQL>

SQL> set echo off

当然,你可以将该角色的权限授予给其他用户

其次,创建一个plan_table表,用来存储分析SQL语句的结果,可以在路径 E:\oracle\product\10.1.0\Db_1\RDBMS\ADMIN下找到 utlxplan.sql,这个文件就是用来创建plan_table表的SQL语句。

create table PLAN_TABLE (

statement_id varchar2(30),

plan_id number,

timestamp date,

remarks varchar2(4000),

operation varchar2(30),

options varchar2(255),

object_node varchar2(128),

object_owner varchar2(30),

object_name varchar2(30),

object_alias varchar2(65),

object_instance numeric,

object_type varchar2(30),

optimizer varchar2(255),

search_columns number,

id numeric,

parent_id numeric,

depth 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),

projection varchar2(4000),

time numeric,

qblock_name varchar2(30)

);

在SQL命令窗口中运行该文件 SQL> @ E:\oracle\product\10.1.0\Db_1\RDBMS\ADMIN\utlxplan.sql这样存储分析SQL语句结果的表就建成了。如果现在在SQL命令窗口中执行一条SQL语句的话,我们会发现还是看不到执行计划的!因为我们有几个回显参数没有设定!

set time on; (说明:打开时间显示)

set autotrace on; (说明:打开自动分析统计,并显示SQL语句的运行结果)

set autotrace traceonly; (说明:打开自动分析统计,不显示SQL语句的运行结果)

所以我们在SQL命令窗口 set autotrace on 或 set autotrace traceonly 时,我们才能看到SQL语句的执行计划和统计信息!

例如在我的system用户模式下有表员工表 e,我执行 SELECT * FROM SYSTEM.e ,将得到如下返回信息:

EID ENAME SEX ID

---------- ---------- ---------- ----------

001 赵1 男 yy

002 钱2 男 02

003 孙3 男 03

004 李4 女 04

005 周5 女 55

执行计划

----------------------------------------------------------

Plan hash value: 3822424092

--------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

--------------------------------------------------------------------------

| 0 | SELECT STATEMENT | | 5 | 185 | 2 (0)| 00:00:01 |

| 1 | TABLE ACCESS FULL| E | 5 | 185 | 2 (0)| 00:00:01 |

--------------------------------------------------------------------------

统计信息

----------------------------------------------------------

0 recursive calls

0 db block gets

4 consistent gets

0 physical reads

0 redo size

784 bytes sent via SQL*Net to client

373 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

5 rows processed

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值