-
1.都可以用来对表、索引、列的统计信息和数据字典统计信息;
-
-
2.系统统计信息和系统内部对象统计信息只能用dbms_stats,而不能用analyze,否则报错;
-
-
举例如下:
-
--使用analyze分析系统表
-
SQL> analyze table x$bh compute statistics;
-
analyze table x$bh compute statistics
-
*
-
ERROR at line 1:
-
ORA-02030: can only select from fixed tables/views
-
-
----使用dbms_stats分析系统表
-
SQL> exec dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'X$BH');
-
PL/SQL procedure successfully completed.
-
-
3.analyze的语法
-
--收集统计信息
-
SQL> analyze table t1 compute statistics;
-
Table analyzed.
-
-
--删除统计信息(包括删除表、所有列及所有索引的统计信息)
-
SQL> analyze table t1 delete statistics;
-
Table analyzed.
-
-
--只对表收集统计信息,并且以估算模式,采样比例为15%
-
SQL> analyze table t1 estimate statistics sample 15 percent for table;
-
Table analyzed.
-
-
--只对表收集统计信息,并且以计算模式
-
SQL> analyze table t1 compute statistics for table;
-
Table analyzed.
-
-
--对表上的列字段进行计算模式收集统计信息
-
SQL> analyze table t1 compute statistics for columns object_name,object_id;
-
Table analyzed.
-
-
--对表和列以计算模式收集统计信息
-
SQL> analyze table t1 compute statistics for table for columns object_name,object_id;
-
Table analyzed.
-
-
备注:对同一个对象而言,新执行的analyze命令会抹掉之前analyze的结果
-
-
--对索引收集统计信息
-
SQL> analyze index idx_t1 compute statistics;
-
Index analyzed.
-
-
3.dbms_stats包里常用的4个存储过程:
-
3.1 gather_table_stats 用于收集目标表、目标表的列和目标表上的索引的统计信息
-
3.2 gather_index_stats 用于收集指定索引的统计信息
-
3.3 gather_schema_stats 用于收集指定schema下所有对象的统计信息
-
3.4 gather_datatabase_stats 用于收集全库所有对象的统计信息
-
-
举例如下:
-
--只对表t1收集统计信息,并且是以估算模式,采样的比例同样为15%
-
SQL> exec dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'T1',estimate_percent=>15,method_opt=>'for table',cascade=>false);
-
PL/SQL procedure successfully completed.
-
-
--对表t1的列object_name和object_id以计算模式收集统计信息(不收集直方图)
-
SQL> exec dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'T1',estimate_percent=>100,method_opt=>'for columns size 1 object_name,object_id',cascade=>false);
-
PL/SQL procedure successfully completed.
-
-
--收集索引的统计信息
-
SQL> exec dbms_stats.gather_index_stats(ownname=>'SYS',indname=>'IDX_T1',estimate_percent=>100);
-
PL/SQL procedure successfully completed.
-
-
--删除表的统计信息
-
SQL> exec dbms_stats.delete_table_stats(ownname=>'SYS',tabname=>'T1');
-
PL/SQL procedure successfully completed.
-
-
--一次性收集表,表上的所有列和所有的索引的统计信息
-
SQL> exec dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'T1',estimate_percent=>100,cascade=>true);
-
PL/SQL procedure successfully completed.
-
-
4.analyze命令不能正确地收集分区表的统计信息,而dbms_stats包可以.analyze命令只会收集最低层次对象的统计信息,然后推导和汇总出高一级的统计信息。
-
-
5.analyze命令不能并行收集统计信息,而dbms_stats包可以。dbms_stats包的并行收集是通过手工指定输入参数degree来实现的。
-
举例如下:
-
SQL> exec dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'T1',cascade=>true,estimate_percent=>100,degree=>4);
-
PL/SQL procedure successfully completed.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28878983/viewspace-2137515/
,如需转载,请注明出处,否则将追究法律责任。