Oracle之深入浅出(二)--SQL原理、解释计划与执行计划

本文深入探讨Oracle SQL执行原理,包括软解析与硬解析的概念,查询转换的影响,以及如何生成和理解解释计划与执行计划。软解析重用已解析的SQL信息,硬解析则需生成新的执行计划。查询转换可能改变SQL结构但不影响结果集,如视图合并、子查询解嵌套等。执行计划预估查询步骤和成本,可通过EXPLAIN PLAN FOR生成。实际执行计划可在v$sql_plan中查看。
摘要由CSDN通过智能技术生成

2、SQL执行原理

2.1、软解析与硬解析

在执行每一条sql的时候,oracle必须解析sql并且装载到高速缓存中,解析的过程包括很多内容,验证语法、检验提及的对象、确认用户权限等过程后还需要手机它所需要的所有信息,需要很多次的系统对象查询,所以说解析sql与不解析sql之间差别数十次的系统对象查询。

  • 软解析:一条sql在验证完并验证通过一些基础的信息后去高速缓存中看这条语句是否执行过,如果执行过就取回之前解析的信息并重用。
  • 硬解析:如果没有执行过,oracle将解析这条sql,生成执行计划,并将它放入高速缓存以便将来重用。

    在高速缓存中存放的是解析完的sql的散列值,所以说每一次修改sql对oracle来说都是一个不同的sql,包括加注释,查看告诉缓存中的sql可以使用v$sql视图来查看(这里有一个技巧,为了方便查找我们可以给我们的sql定义一个唯一的id(注释)方便以后查询)。

 
 
 
  1. SELECT /* key-menu */ * from ho_menu where name like '我的控制台';
  2. select * from v$sql where sql_text like '%key-menu%';

2.2、查询转换

块是oracle进行操作的最小单位,下面是只有一个查询块

 
 
 
  1. select * from employees where department_id=1

而下面就是有两个查询块

 
 
 
  1. select * from employees where department_id in (select department_id from departments)

查询块是通过select关键字来定义的,查询转换就是查询块的转换,在sql通过了语法与权限检查后就会进行查询转换,就是确定如果改变了查询写法会不会提供更好的查询计划,所以查询转换器可能会改变你所写的sql查询结构,但是不会影响最终的查询结果集。 
最通常的转换就是将独立的查询快转换为直接连接:

 
 
 
  1. select * from employees where department_id in (select department_id from departments)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值