oracle sql语句解析过程
来源:互联网 发布:淘宝猫粮店推荐 编辑:程序博客网 时间:2024/06/05 12:42
oracle数据库的性能问题,除了服务器存储或者 架构(RAC还是单实例)上不够给力以外。还需要考虑OS参数配置比如linux内核参数设置的是否合理 和oracle参数配置信息,但最主要的问题还是出在sql上。你写的SQL到底好不好很关键。sql优化很复杂,除了学好sql编程以外,还需要我们掌握最基础的知识,比如说sql解析过程、执行计划、统计信息等基础信息。
今天主要是总结一下sql的解析。如果写了的sql能够重复的利用,能够使用软解析,肯定比硬解析从性能上来讲要好很多。
首先sql解析的类型:
1、硬解析
2、软解析 (跟共享池有关)
3、软软解析 (跟PGA有关)
什么叫硬解析呢?
sql从解析到执行总共有4个步骤。
1、语法分析
select * fro emp;
首先分析出fro少了m,语法上不符合,直接报错
2、语法分析通过后,进行语义分析。
select emp_id from emp,还需要分析当前用户下有无emp这个表,如果有,当前用户对emp有无权限。 对象存在并且有权限的情况下,执行第三步
3、查询sql的hash value是否在共享池中存在,如果不存在,需要生成解析树,根据统计信息,生成执行计划。
4、生成最有的执行计划后,执行SQL.
什么叫软解析?
可以想象在OLTP场景下,很多短查询都需要硬解析的话,CPU使用率非常高的。生成解析树和选择并生成最优的执行计划是非常耗费CPU的。 那怎么办,如果在计算出sql的hash value时,在共享池中查询,有相同的hash value的sql语句,那么sql就不需要再生成解析树和执行计划了,那么最好费CPU的步骤省略了,这样相当于sql解析过一次,再执行相同的sql不用解析,是不是从查询效率有很大的提升。这个从共享池中找到sql 解析过程是软解析。
什么叫软软解析?
大家知道我们一般使用独享模式方式连接数据库,就像我们去饭店做的是包间,不是打听一样,有单独的服务员给我们服务。也就是说PGA上存了我们整个解析。
现在可以把共享池认为是大堂经理,整个饭店有啥事都可以招呼他,而我们包间的服务员是包间独享的。在饭店吃饭的时候,我们水壶的水没了,我们是直接找大堂经理速度快,还是找我们服务员速度快。软软解析就是省略掉查询共享池的操作,因为在共享池中及时查到了相同的hash value,也得看你有没有权限使用。但是在PGA中查到了,你肯定可以使用。所以不需要做语义检查的。也就是说你找大堂经理,给你找个人倒水,如果这个人是对面房间的服务员 ,你没有权限使用,如果你直接找你包间的服务员,说一声他就得做。所以软软解析的效率更高。
弄清楚硬解析、软解析、软软解析,我们就有个疑问,在什么情况下能用到呢?
DDL: create drop alter 肯定硬解析,就像你盖房子,拆房子,能再来一遍吗?房子没了怎么再拆。
DML: insert delete select update 可以通过软解析 就像你打扫房间,当然可以打扫很多次。
怎么用呢?
绑定变量是个好办法。
对于解析这块只是,如何查询hash value等等,都有对应系统sql语句。这块以后再更新。
- oracle sql语句解析过程
- oracle解析SQL语句的过程
- Oracle之SQL语句执行过程解析
- Oracle中SQL语句运行过程的深度解析
- oracle sql 解析过程
- oracle sql 解析过程
- 解析SQL语句的过程
- SQL语句解析过程浅析
- SQL语句的解析过程
- SQL语句的解析过程
- SQL语句的解析过程
- SQL语句的解析过程
- SQL语句的解析过程
- SQL语句的解析过程
- Oracle SQL语句处理过程
- Oracle SQL语句处理过程
- Oracle SQL语句执行过程
- Oracle SQL语句执行过程
- leetcode 439. Ternary Expression Parser
- 安卓最新版本及基础知识
- 最长公共子序列与编辑距离动态规划原理分析
- php 递归与迭代区别
- C语言经典算法16
- oracle sql语句解析过程
- Linux安装搜狗输入法
- BOM编程-ELEMENT
- JS学习(三)
- 【回归分析】[5]--多元线性回归对参数的F检验
- linux系统编程之信号(二):一些信号发送函数和不同精度的睡眠
- 围棋中的正方形
- C语言经典算法17
- BOM编程-TEXT