Oracle数据库中的统计信息是这样一组数据:它存储在数据字典中,且从多个维度描述了Oracle数据库里对象的详细信息。 CBO会利用这些统计信息来计算目标SQL各种可能的,不同的执行路径的成本,从中选择一条成本最小的执行路径来作为目标SQL的执行计划。
统计信息分为以下六种:
表的统计信息
索引的统计信息
列的统计信息
系统统计信息
数据字典统计信息
内部对象统计信息:用于描述Oracle数据库里的一些内部表(如X$系列表)的详细信息。

收集统计信息

通常有两种方法
  • 使用Analyze命令
  • 使用DBMS_STATS包
    表、索引、列、数据字典 的统计信息 这两种方法都可收集。 系统统计信息和系统内部对象统计信息只能使用DBMS_STATS包

Analyze命令用法

  1. 以计算模式: analyze table abc compute statistics for table; 会扫描目标对象的所有数据,所以统计结果和实际结果相匹配。
  2. 以估算模式: analyze table abc estimate statistics sample 15 percent for table; 估算模式,估算结果和实际结果不一定完全匹配

DBMS_STATS包用法

  • GATHER_TABLE_STATS 用于收集目标表、目标表列和目标表上的索引统计信息
  • GATHER_INDEX_STATS 用于收集指定索引的统计信息
  • GATHER_SCHEMA_STATS 用于收集指定schema下所有对象的统计信息
  • GATHER_DATABASE_STATS 用于收集全库所有对象的统计信息

  1. 估算模式 exec dbms_stats.gather_table_stats(ownname=>'scott' , tabname=>'T2' , estimate_percent=>15 , method_opt=>'FOR TABLE' , cascade=>false);

  2. 计算模式 exec dbms_stats.gather_table_stats(ownname=>'scott' , tabname=>'T2' , estimate_percent=>100, method_opt=>'FOR TABLE' , cascade=>false); 或者 exec dbms_stats.gather_table_stats(ownname=>'scott' , tabname=>'T2' , estimate_percent=>NULL, method_opt=>'FOR TABLE' , cascade=>false);

Analyze和DBMS_STATS区别

  • Analyze命令不能正确地收集分区表的统计信息,而DBMS_STATS包却可以。
  • Analyze命令不能并行收集统计信息,而DBMS_STATS包却可以。
    DBMS_STATS包的并行收集是通过手工指定输入参数 DEGREE 来实现的,如对表 T1 并行收集统计信息,同时指定并行度为4:exec dbms_stats.gather_table_stats(ownname=>'scott' , tabname=>'T1' , estimate_percent=>NULL, method_opt=>'FOR TABLE' , cascade=>true , degree=>4);
  • DBMS_STATS包的缺陷是只能收集CBO相关统计信息,不能收集CBO无关的一些额外信息,Analyze却可以。

Oracle 统计信息的更多相关文章

  1. 有关Oracle统计信息的知识点[z]

    https://www.cnblogs.com/sunmengbbm/p/5775211.html 一.什么是统计信息 统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息.例如, ...

  2. 有关Oracle统计信息的知识点

    一.什么是统计信息 统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息.例如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于 ...

  3. [Oracle] oracle统计信息

    Oracle统计信息 Oracle数据库里的统计信息可以分为6种类型: 表的统计信息 索引的统计信息 列的统计信息 系统统计信息 数据字典统计信息 内部对象统计信息 图 1: Oracle统计信息 基 ...

  4. oracle统计信息

    手工刷ORACLE统计信息  select count(1) from LOG_TRX_DETAIL;  select * from user_tab_statistics where table_n ...

  5. 收集oracle统计信息

    优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN:列统计: --列中唯一值的数量(NDV),NULL值的数量,数据分 ...

  6. Oracle 统计信息收集

    官网网址参考: https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_stats.htm#CIHBIEII https://docs.ora ...

  7. 测试Oracle统计信息的导出导入

    背景:有时我们会希望可以对Oracle的统计信息整体进行导出导入.比如在数据库迁移前后,希望统计信息保持不变;又比如想对统计信息重新进行收集,但是担心重新收集的结果反而引发性能问题,想先保存当前的统计 ...

  8. Oracle 统计信息介绍

      统计信息自动执行需要以下条件满足: dba_autotask_task 字段status值ENABLED dba_autotask_client 字段status值ENABLED dba_auto ...

  9. 【练习】ORACLE统计信息--直方图

    ①创建表tSQL> create table t as select * from dba_objects; Table created. --收集直方图 SQL> exec dbms_s ...

随机推荐

  1. jQuery轮播图(二)利用构造函数和原型创建对象以实现继承

    本文是在我开始学习JavaScript继承时,对原型继承的一些理解和运用.文中所述的继承方式均是使用js特有的原型链方式,实际上有了ES6的类之后,实现继承的就变得十分简单了,所以这种写法现在也不在推 ...

  2. 【转】老生常谈-从输入url到页面展示到底发生了什么

    今天看到了一篇很详细地解释了从输入url到页面展示过程的文章,好文章不能错过,所以转到自己这里来了. 原文地址:老生常谈-从输入url到页面展示到底发生了什么 以下为原文: 刚开始写这篇文章还是挺纠结 ...

  3. android toast使用方法

    1.默认展示 // 第一个参数:当前的上下文环境.可用getApplicationContext()或this // 第二个参数:要显示的字符串.也可是R.string中字符串ID // 第三个参数: ...

  4. shell学习笔记--持续记录

    1.#!/bin/sh 使用sh程序来执行下边的代码 #!/bin/more 输出下边的代码 #!/bin/可执行程序 下边的代码将会作为此程序的输入 2. * 可以用来匹配文件名,正则匹配,作为乘法 ...

  5. SSM 框架-05-详细整合教程(Eclipse版)(Spring+SpringMVC+MyBatis)

    SSM 框架-05-详细整合教程(Eclipse版)(Spring+SpringMVC+MyBatis) 如果你使用的是 Intellij IDEA,请查看: SSM的配置流程详细的写了出来,方便很少 ...

  6. 基于bootstrap模态框的alert弹窗

    完成的效果如下: html代码: <!-- 弹出框 --> <div class="modal fade" id="alert_like" t ...

  7. 购买 In-app Billing 商品

    购买 In-app Billing 商品 一旦你的应用连接上了 Google Play,你就可以初始化内购商品的购买请求了.Google Play 提供了结算接口,可以让用户进入使用他们的支付方式,所 ...

  8. Python实例---三级菜单的实现[high]

    # version: python3.2.5 # author: 'FTL1012' # time: 2017/12/7 09:16 menu = { '陕西': { '西安': { '未名区': [ ...

  9. Linux telnet命令详解

    telnet命令通常用来远程登录.telnet程序是基于TELNET协议的远程登录客户端程序.Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户 ...

  10. Asp.Net MVC Identity 2.2.1 使用技巧(四)

    使用用户管理器之用户管理 一.建立模型 1.在Models文件夹上点右键 >添加>类     类的名称自定,我用AdminViewModels命名的. 2.更改模板自建的AdminView ...