为什么静态sql语句会减少软解析
发布网友
发布时间:2022-05-02 03:26
我来回答
共2个回答
热心网友
时间:2022-05-02 04:55
深入shared pool
解析SQL语句
生成执行计划
中间考虑的因素很多,包括访问的对象的存在、权限、等等
执行SQL语句
解析的过程(生成最优执行计划)是一个耗费资源的过程,随着用户的并发数量的增加。数据库的性能也会降低的很快。
ORCLE对解析的执行
1、ORACLE将SQL语句分成为两个部分:静态部分+动态部分
2、静态部分:SQL 语句的关键词(所涉及的表名称、列名称、等)
3、动态部分:字面值(表里面的表数据,例如 where name=‘xkj’中的xkj)
静态部分是有限的、动态部分是无限的
绑定变量:实现SQL共享(静态部分),减少解析。在实际中,不同的SQL语句的静态部分的重复率非常的高。实际上,动态部分对SQL语句的解析的影响可以忽略不计
通过使用绑定变量,用来提高SQL语句的缓存命中率(减少解析次数、减少sql缓存)
declare
v1 varchar2(10);
n1 int;
begin
n1:=1
select salary into v1 from test where id=n1;
end;
在上面的SQL语句中,使用了绑定变量n1,在解析的时候,使用的绑定变量。执行的时候,将字面值传入语句中。因此这样SQL语句的命中率将会提高。
ORCLE将解析过的SQL语句缓存在shared pool中,碰到相同的SQL语句再次执行的时候,ORACLE直接使用已经解析过的执行计划。
Shared pool缓存内容:SQL语句、执行计划、PL/SQL代码、PL/SQL机器码等
Shared pool细分
1、库缓存:最近执行的SQL语句、存储过程、函数、解析树、执行计划,最活跃部分
2、数据字典缓存:SQL执行过程中涉及的数据字典
递归调用:shared pool为生成执行计划,又进行了很多别的调用(如查询数据字典)
热心网友
时间:2022-05-02 06:13
相当于你每次执行的时候都要解析一次SQL的语法 可定会慢了