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.尽可能的使用绑定变量来避免硬解析。
 

原文地址:https://www.cnblogs.com/danhuangpai/p/14484554.html