Oracle执行计划查看

查询过程介绍

当一个SQL查询被执行时,Oracle查询优化器(query optimizer)会快速计算分步执行计划,详细说明它将如何检索查询中指定的列值。在计算执行计划时,优化器决定哪些表和索引用来检索数据。
如果没有索引存在,则表本身是可用于满足查询结果的唯一访问路径。Oralce别无选择,只能检查每一行数据检查是否符合查询条件(全表扫描-full table scan)。

数据准备

-- 创建一个客户表存放客户信息
create table cust
(cust_id number
,last_name varchar2(30)
,first_name varchar2(30)); 
-- 插入一条数据待查询数据
insert into cust (cust_id, last_name, first_name) values(1, 'STARK','JIM'); 
-- 模拟插入100万客户信息
insert into cust
select rownum + 1
 ,dbms_random.string('U',dbms_random.value(3,15)) rand_last_name
 ,dbms_random.string('U',dbms_random.value(3,15)) rand_first_name
from xmltable('1 to 1000000'); 
# 创建索引
create index cust_idx1
on cust(last_name); 

查看计划

查看执行计划时,尽量先收集表的统计信息,否则计划可能不准

-- 通过以下存储过程收集表的统计信息
call dbms_stats.gather_table_stats( user, 'CUST' ); 

PL/SQL Developer Explain plan Window
PL/SQL Developer依次点击File->new->Explain plan Window打开一个执行计划窗口,在执行计划窗口编写需要查看执行计划的SQL,然后按F8F5快捷键查看执行计划(也可以点击绿色执行按钮)
在这里插入图片描述

PL/SQL Developer Command Window

PL/SQL Developer依次点击File->new->Command Window打开一个命令窗口,在命令窗口中执行下面的SQL进行执行计划查询

-- 生成执行计划
explain plan for
select cust_id, last_name, first_name
from cust
where last_name = 'STARK';
-- 查看执行计划
select * from table(dbms_xplan.display(null,null,'BASIC +COST')); 

在这里插入图片描述

执行流程总结

  1. 用户提交查询请求
  2. 查询将传递到Oracle服务器进程
  3. Oracle查询优化器被调用. 它创建一个包括访问索引的执行计划。
  4. 访问索引获得相关数据行的ROWID
  5. 通过ROWID,定位到数据行所在的数据文件和块
  6. 数据行返回到Oracle服务器进程
  7. Oracle服务器进程将结果返回给用户
    在这里插入图片描述

参考:Expert Oracle Indexing and Access Paths

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值