Oracle SQL语句解析过程
目录
1 软硬解析
SQL语句在到达Oracle实例后,需要先进行解析,分析出最优的执行计划后,再按照执行计划,开始执行SQL。根据能否复用执行计划,解析过程可以分析以下两大类:
- 硬解析过程:当一用户第一次提交一条SQL语句时,Oracle会将这SQL进行Hard parse,过程有点像程序编译,会检查SQL语法、表及其他对象的权限等信息。这过程会花比较长的时间,因为它要分析SQL语句的语法与语义。然后获得最优化后的执行计划(sql plan),并在内存中分配一定的空间保存该语句以及对应的执行计划等信息。
- 软解析过程:当用户第二次请求或更多次请求时,Oracle会自动找到先前的语句与执行计划,不会进行Hard parse,而是直接进行Soft parse,即把语句对应的执行计划调出,然后执行,从而减少数据库的分析时间。
【注意】:Oracle中只有完全相同的语句,包大小写、空格、换行都要求一样时,才会重复使用以前的分析结果与执行计划。
对于大量的、频繁访问的SQL语句,尽量采用Bind变量方式,走Soft parse,减少Hard parse,降低CPU和内存资源消耗。
2 SQL解析过程
ORACLE SQL语句的具体处理过程,大致如下:
- SQL语句经过HASH运算,得到一个HASH值;
- 在Shared Pool 的 Library Cache 中查找是否有相同的HASH值,如果存在,则无需硬解析,直接进行软解析;
- 如果Shared Pool不存在此HASH值,则进行语法检查,查看是否有语法错误 ;
- 如果没有语法错误,就进行语义检查,检查该SQL引用的对象是否存在,该用户是否具有访问该对象的权限;
- 如果没有语义错误,对该SQL进行解析,生成解析树和执行计划;
- 生

最低0.47元/天 解锁文章
4146

被折叠的 条评论
为什么被折叠?



