zoukankan      html  css  js  c++  java
  • Oracle数据库使用Analyze提升sql性能

     

    Oracle数据库使用Analyze提升sql性能

          如果你不使用analyze完成sql优化,将意味着:你拒绝使用数据库的查询优化器,也失去了使用优化连接的机会。假设你创建了一张拥有100万条记录的临时表,如果不对其进行分析,那么优化器将无法从现有的线索中获取表中真正的内容,于是它只能决定使用嵌套循环连接来一行行地扫描数据表,随着数据集的增长,你的数据库性能会越来越差。

       ORACLE数据库的PL/SQL语句执行的优化器,有基于代价的优化器(CBO)和基于规则的优化器(RBO)。

       RBO的优化方式,依赖于一套严格的语法规则,只要按照规则写出的语句,不管数据表和索引的内容是否发生变化,不会影响PL/SQL语句的"执行计划"

    CBOORACLE7版被引入,ORACLE7版以来采用的许多新技术都是只基于CBO的,如星型连接排列查询,哈希连接查询,反向索引,索引表,分区表和并行查询等。CBO计算各种可能"执行计划""代价",即cost,从中选用cost最低的方案,作为实际运行方案。各"执行计划"cost的计算根据,依赖于数据表中数据的统计分布,ORACLE数据库本身对该统计分布是不清楚的,须要分析表和相关的索引,才能搜集到CBO所需的数据。要想使用好CBO,使SQL语句发挥最大效能,必须保证统计数据的及时性。

        统计信息的生成可以有完全计算法和抽样估算法。SQL例句如下:

       完全计算法:analyze table abc compute statistics;
     
       抽样估算法(抽样20%) analyze table abc estimate statistics sample 20percent;

        可以通过定时任务方式,定时通过analyze命令完成数据库中相应表内容的分析处理。

     


  • 相关阅读:
    iPhone X 适配手机端 H5 页面通用解决方案
    创建cordova项目
    UltraEdit mac破解版
    ionic 和cordova的区别是什么
    还在为AndroidStudio的Gradle版本配置头疼?看看老司机的解决方法吧
    java final
    死锁产生的条件+排除死锁的方法
    String str=new String("a")和String str = "a"有什么区别?
    重载和覆盖的区别?(overload vs override)
    深拷贝和浅拷贝
  • 原文地址:https://www.cnblogs.com/widget90/p/9678884.html
Copyright © 2011-2022 走看看