oracle基础~SQL优化

一 软解析和硬解析

1 解析过程:

1 语法 语义分析

2 权限和对象检查

3 在共享池中进行检测是否有已解析的相同SQL,如果存在 则跳过4 ,5 执行软解析,4-5成本比较高 所以要避免硬解析,绑定变量)

4 选择执行计划(可能有多个执行计划数)

5 生成执行计划

2 查看解析结果

select hash_value,executions,sql_text from $sql like 'sql内容'

以用户为角度进行缓存,所以可能存在多个相同的sql内容的记录

3 查看优化器

show parameter optimizer

optimizer_mode: ALL_ROWS

4 绑定变量

绑定变量的目的是让SQL本身从硬解析转换成软解析 从而减少系统资源的消耗

针对对象 SQL模板相同 但是 条件内容不同的SQL语句

注意点

1 oltp 可以实施绑定变量战略 但是olap 尽量不要用绑定变量 有时候 全表扫描反而效率更高

2 绑定变量的实质就是用于替代sql语句中的常量的替代变量。绑定变量能够使得每次提交的sql语句都完全一样

3 绑定变量适合任何 单条 SQL事务语句 和 存储过程。

案例

1 定义变量

variable i number;

2 赋值 exec :i :=1; exec :i =2

3 查询 select *from tt where id=:i;

select *from tt where id=:i;

二 总结:

1.尽可能的避免硬解析,因为硬解析需要更多的CPU资源,闩等。

2.cursor_sharing参数应权衡利弊,需要考虑使用similar与force带来的影响。

3.尽可能的使用绑定变量来避免硬解析。