zoukankan      html  css  js  c++  java
  • 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.尽可能的使用绑定变量来避免硬解析。
     

  • 相关阅读:
    分布式事务基本概念
    rocketmq源码分析3-consumer消息获取
    Mac下的Eclipse不能记住工作空间问题
    rocketmq源码分析2-broker的消息接收
    rocketmq源码分析1-benchmark学习
    metrics
    slf4j与logback对接是如何将日志写到控制台的
    Spring AOP
    hibernate数据库连接池,常用配置
    动态代理
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/14484554.html
Copyright © 2011-2022 走看看