如果我们想让CBO利用合理利用数据的统计信息,正确判断执行任何SQL查询时的最快途径,需要及时的使用analyze命令或者dbms_stats重新统计数据的统计信息.

例如索引跳跃式扫描(INDEX SKIP SCAN)例子中,如果不对表EMPLOYEE 及索引收集一下统计信息,就不是INDEX SKIP SCAN策略了。

在oracle 8i以前,主要是用ANALYZE命令。在ORACLE 8I以后,又引入了DBMS_STATS存储包来进行分析。幸运的是从ORACLE 10G以后,分析工作变成自动的了,这减轻的DBA的负担

分析统计信息

analyze table 一般可以指定分析: 表,所有字段,所有索引字段,所有索引。 若不指定则全部都分析。

---table统计信息

analyzetable EMP compute statistics for table;---column统计信息

analyzetable EMP compute statistics for allcolumns;---索引统计信息

analyzetable EMP compute statistics for allindexes;---索引列统计信息

analyzetable EMP compute statistics for allindexed columns;---效果等于 analyze table tablename compute statistics for table for all indexes for all columns

analyzetable tablename compute statistics

查看统计信息

for table的统计信息存在于视图:user_tables 、all_tables、dba_tables

for all indexes的统计信息存在于视图: user_indexes 、all_indexes、dba_indexes

for all columns的统计信息存在于试图:user_tab_columns、all_tab_columns、dba_tab_columns

SCOTT@PDBORCL> analyze table EMP compute statistics for table;

表已分析。

SCOTT@PDBORCL> analyze table EMP compute statistics for allcolumns;

表已分析。

SCOTT@PDBORCL> analyze table EMP compute statistics for allindexes;

表已分析。

SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';

TABLE_NAME NUM_ROWS----------- -----------

EMP14SCOTT@PDBORCL> select index_name,uniqueness from user_indexes where table_name = 'EMP';

INDEX_NAME UNIQUENES-------- ---------

PK_EMPUNIQUESCOTT@PDBORCL> select column_name,data_type from user_tab_columns where table_name = 'EMP';

COLUMN_NAME DATA_TYPE-------------------------

EMPNONUMBERENAMEVARCHAR2JOBVARCHAR2MGRNUMBERHIREDATE DATE

SALNUMBERCOMMNUMBERDEPTNONUMBER已选择8行。

SCOTT@PDBORCL> ^A

删除统计信息

会删除emp所有的statistics。

analyze table emp delete statistics

删除只是某些列变为空,如emp表的行数为空了

SCOTT@PDBORCL> analyze table emp compute statistics;

表已分析。

SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';

TABLE_NAME NUM_ROWS-------- ----------

EMP14SCOTT@PDBORCL> analyze table emp delete statistics;

表已分析。

SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';

TABLE_NAME NUM_ROWS-------- ----------

EMP

SCOTT@PDBORCL>

dbms_stats

dbms_stats能良好地估计统计数据(尤其是针对较大的分区表),并能获得更好的统计结果,最终制定出速度更快的SQL执行计划。

语法:

dbms_stats.gather_table_stats (

ownname varchar2, tabname varchar2, partname varchar2, estimate_percent number, block_sample boolean, method_opt varchar2, degree number, granularity varchar2, cascadeboolean, stattab varchar2, statid varchar2, statown varchar2, no_invalidate boolean, force boolean );

dbms_stats.delete_table_stats 用于删除统计信息。

例子:

------删除统计信息SCOTT@PDBORCL> exec dbms_stats.delete_table_stats (ownname => 'scott',tabname => 'emp');

PL/SQL 过程已成功完成。----查询统计信息

SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';

TABLE_NAME NUM_ROWS-------- ----------

EMP---获取统计信息SCOTT@PDBORCL> exec dbms_stats.gather_table_stats (ownname => 'scott',tabname => 'emp');

PL/SQL 过程已成功完成。---重新查新统计信息

SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';

TABLE_NAME NUM_ROWS-------- ----------

EMP 14SCOTT@PDBORCL>

参考:

oracle更新统计信息执行计划,为准确生成执行计划更新统计信息-analyze与dbms_stats...相关推荐

  1. SQL Server统计信息以及如何在SQL中执行更新统计信息

    This article gives a walk-through of SQL Server Statistics and different methods to perform SQL Serv ...

  2. 执行计划有时不准确_生产计划四个层次和解决方案

    生产计划四个层次和解决方案 如何让ERP排出来的生产计划切实可用.让ERP生产计划模块不再成为ERP系统的瓶颈,这是很多实施顾问都想攻克的一个难题.那为什么这个生产计划就会这么难呢,这有多个因素的原因 ...

  3. mysql统计信息表行数不准确_mysql SQL调优-统计信息不准的原因

    问题现象: 开发报告查询语句突然变慢. 处理过程: 1.在从库查看执行计划: 并且执行查询,结果是返回159条数据,只需要0.58秒,并不慢 (2)了解到原来应用连接的是主库,随即上主库查看执行计划, ...

  4. oracle 索引概念、索引相关、sql查询执行计划

    文章目录 一.索引 1.1 索引概念 1.2 索引分类 1.3 位图索引(企业版oracle): 1.4 B树索引 (1) 唯一索引 (2) 组合索引 (3) 反向键索引 (4) 函数索引 1.5 和 ...

  5. oracle 阻止谓语前推,Oracle之深入浅出(二)--SQL原理、解释计划与执行计划

    2.SQL执行原理 2.1.软解析与硬解析 在执行每一条sql的时候,oracle必须解析sql并且装载到高速缓存中,解析的过程包括很多内容,验证语法.检验提及的对象.确认用户权限等过程后还需要手机它 ...

  6. 【Oracle】三种方式查看SQL语句的执行计划

    查看执行计划的方式有三种: EXPLAIN PLAN .V$SQL_PLAN .SQL*PLUS AUTOTRACE 1.EXPLAIN PLAN: 显示执行相应语句时可以使用的理论计划 读取执行计划 ...

  7. 《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一1.1 生成执行计划

    1.1 生成执行计划 在Oracle中,任何一条语句在解析过程中都会生成一个唯一的数值标识,即SQL_ID.而同一条语句,在解析过程中,可能会因为执行环境的改变(例如某些优化参数被改变)而生成多个版本 ...

  8. oracle++spm,ORACLE 11G 使用SPM来调整SQL语句的执行计划

    跟大家说明一下: ITSM 数据库迁移升级到11G后,有几条SQL语句的执行计划不正确,而且这些语句都是使用绑定变量的. 最初的调整想法是获得这些的语句的绑定变量值,将获得的字面值直接替换SQL语句的 ...

  9. oracle+统计表的字段,统计系统中表的个数与查询所有表的字段信息-Oracle

    统计系统中表的个数与查询所有表的字段信息 –统计系统中表的个数: –表描述字段: –需要字段:Name.Code.Commente select lower(a.TABLE_NAME) || '-' ...

最新文章

  1. mysql command line闪退_MySQL Command Line Client 打不开(闪退)的解决
  2. python编辑时怎样换行_python怎么换行输入
  3. 网易云信三周年:我们只做第一
  4. Vue实现Todo List
  5. LintCode 1677. 石头(自定义优先队列)
  6. mysql 5.7 多主一从_mysql5.7多主一从,从机调优
  7. android+模拟器上gdb,使用gdb在Android Emulator中进行调试c程序
  8. Product user profile information 没有导入
  9. Linux系统安全概述-sudo授权-pam认证机制-对称加密-非对称加密-md5-数字证书
  10. [2019杭电多校第六场][hdu6638]Snowy Smile(维护区间最大子段和)
  11. 让你的模型acc更上一层楼:模型trick和数据方法总结
  12. 【交换机在江湖】第十二章 VLAN基础篇
  13. java中小数点位数_Java中限制小数位数问题
  14. 骑行运动,对青春期年青人有什么好处?
  15. 【转】为您解决HDMI无声的烦恼
  16. java实现生成指定位数随机字符串要求包含数字大小写字母三种类型字符
  17. saltstack grain pillar
  18. Probabilistic Embeddings with Laplacian Graph Priors
  19. 周易哲学(一):干支纪年法和四柱八字
  20. 4-5课:为什么每个程序员都要拜四阿哥?要解决bug(八阿哥)

热门文章

  1. Xilinx RAM IP核的使用
  2. 嵌入式研发人员的核心竞争力浅谈 .
  3. 技术干货-PCB彩印教程(水转印)
  4. WiFi漫游了解一下?大户型wifi组网方案
  5. 【arduino】初测ESP32的DAC生成AV视频模拟信号项目:ESP32CompositeVideo
  6. 【PC工具】解放双手:分享京东双十一任务脚本,双十一京东全民养红包活动自动脚本分享...
  7. 使用matlab模拟、检验和估计泊松过程
  8. Linux下GBK文件编码批量转换UTF-8命令
  9. arcgis python 保存当前窗口图形为jpg
  10. 表单验证,添加动态class