为准确生成执行计划更新统计信息-analyze与dbms_stats
如果我们想让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统计信息
analyze table EMP compute statistics for table; ---column统计信息
analyze table EMP compute statistics for all columns; ---索引统计信息
analyze table EMP compute statistics for all indexes; ---索引列统计信息
analyze table EMP compute statistics for all indexed columns; ---效果等于 analyze table tablename compute statistics for table for all indexes for all columns
analyze table 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 all columns;
表已分析。 SCOTT@PDBORCL> analyze table EMP compute statistics for all indexes;
表已分析。 SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';
TABLE_NAME NUM_ROWS
----------- -----------
EMP 14 SCOTT@PDBORCL> select index_name,uniqueness from user_indexes where table_name = 'EMP';
INDEX_NAME UNIQUENES
-------- ---------
PK_EMP UNIQUE SCOTT@PDBORCL> select column_name,data_type from user_tab_columns where table_name = 'EMP' ; COLUMN_NAME DATA_TYPE
-------------------------
EMPNO NUMBER
ENAME VARCHAR2
JOB VARCHAR2
MGR NUMBER
HIREDATE DATE
SAL NUMBER
COMM NUMBER
DEPTNO NUMBER 已选择 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
-------- ----------
EMP 14 SCOTT@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,
cascade boolean,
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 14 SCOTT@PDBORCL>
参考:
http://docs.oracle.com/database/121/TGSQL/tgsql_stats.htm#TGSQL389
为准确生成执行计划更新统计信息-analyze与dbms_stats的更多相关文章
- SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)
本文出处:http://www.cnblogs.com/wy123/p/6008477.html 关于统计信息对数据行数做预估,之前写过对非相关列(单独或者单独的索引列)进行预估时候的算法,参考这里. ...
- Oracle执行计划与统计信息的一些总结
[日期:2011-08-05]来源:Linux社区 作者:wangshengfeng1986211[字体:大 中 小] 2010-07-01 15:03 1.SET AUTOTRACE ON EXP ...
- sqlplus中显示sql执行计划和统计信息
31 ,32 , 33 ,34 keywords : oracle storage structure 最详细讲解: 1:doc 1 logical storage structure 2 ...
- SQL Server 执行计划利用统计信息对数据行的预估原理以及SQL Server 2014中预估策略的改变
前提 本文仅讨论SQL Server查询时, 对于非复合统计信息,也即每个字段的统计信息只包含当前列的数据分布的情况下, 在用多个字段进行组合查询的时候,如何根据统计信息去预估行数的. 利用不同字段 ...
- 第十二章——SQLServer统计信息(1)——创建和更新统计信息
原文:第十二章--SQLServer统计信息(1)--创建和更新统计信息 简介: 查询的统计信息: 目前为止,已经介绍了选择索引.维护索引.如果有合适的索引并实时更新统计信息,那么优化器会选择有用的索 ...
- SQLServer 创建dtsx包更新统计信息(示例)
http://blog.csdn.net/kk185800961/article/details/43816177(转载) 1 . 打开Microsoft Visual Studio 创建 integ ...
- SQL Server 更新统计信息出现严重错误,应放弃任何可能产生的结果
一台SQL Server 2008 R2版本(具体版本如下所示)的数据库,最近几天更新统计信息的作业出错,错误如下所示: Microsoft SQL Server 2008 R2 (SP2) - ...
- SQL2008R2的 遍历所有表更新统计信息 和 索引重建
[2.以下是更新统计信息] DECLARE UpdateStatisticsTables CURSOR READ_ONLY FOR SELECT sst.name, Schema_name(sst.s ...
- PG 更新统计信息
http://blog.chinaunix.net/uid-24774106-id-3802225.html 一.vacuum的效果: 1.1释放,再利用 更新/删除的行所占据的磁盘空间. 第一点的原 ...
随机推荐
- 进一步优化ListView
之前我已经分享过一篇:viewHodler的通用写法,就是专门用来优化listview的加载的,但是对于复杂的布局,我们还需要在listview滑动和不滑动时进行自己的处理,今天我看到一篇文章就是讲这 ...
- Kubernetes基础:Pod的详细介绍
本文的演练环境为基于Virtualbox搭建的Kubernetes集群,具体搭建步骤可以参考kubeadm安装kubernetes V1.11.1 集群 1. 基本概念 1.1 Pod是什么 Pod是 ...
- 将Linux默认的OpenJDK替换为Oracle JDK
在使用Logstash安装插件的时候,发生了一个错误,如下: ERROR: Something went wrong when installing logstash-input-jdbc, mess ...
- sklearn中SVM调参说明
写在前面 之前只停留在理论上,没有实际沉下心去调参,实际去做了后,发现调参是个大工程(玄学).于是这篇来总结一下sklearn中svm的参数说明以及调参经验.方便以后查询和回忆. 常用核函数 1.li ...
- [转]缓慢但胜在稳健,HBase大势已成
CSDN Hbase : http://www.csdn.net/tag/hbase 在NoSQL数据库领域,统治产品无疑当属MongDB和DataStax Enterprise(一个领先的Apach ...
- 开放重定向(Open Redirection)
简介 那些通过请求(如查询字符串和表单数据)指定重定向URL的Web程序可能会被篡改,而把用户重定向到外部的恶意URL.这种篡改就被称为开发重定向攻击. 场景分析 假设有一个正规网站http://ne ...
- DP思路
在这里记录一些在大神们的博客,以及自己做过的一些DP的神奇思路吧 1.2015/04 NEUQ 月赛 转自:http://zyfzyf.is-programmer.com/posts/89993.h ...
- hyper-v 用户无法再 创建外部配置存储 0x80070005
windows server 2008R2 刚安装的hyper-v 重启过. 修改配置文件到d:\Hyper-V目录下, hyper-V 创建 服务器遇到错误 操作失败 创建外部配置存储:一般性拒绝访 ...
- 析构函数 (C++)
最近发现自己对析构函数的认知有一定的问题,因为之前有在使用placement new时主动调用对象的析构函数,所以觉得析构函数只是个普通的成员函数,调用的时候只会执行自己方法体内的代码内容,而回收内存 ...
- .Net(c#)打印--多页打印
如果要实现多页打印,就要使用PrintPageEventArgs类的HasMorePages属性. 我们对之前的代码作如下变更: 增加PrintDocument的BeginPrint和End ...