收集统计信息有两种方法:一是通过analyze命令,一是通过dbms_stats包
使用analyze收集统计信息的方法
删除索引的统计信息
analyze index index_name delete statistics;
以估算的模式,采样的比例15%收集统计信息
analyze table table_name estimate statistics sample 15 percent for table;
以计算模式收集统计信息
analyze table table_name compute statistics for table;
对列以计算模式收集统计信息
analyze table table_name compute statistics for columns column_name1,column_name2;
以计算模式对表和列收集统计信息
analyze table table_name compute statistics for table for columns column_name1,column_name2;
以计算模式收集索引的统计信息
analyze index index_name compute statistics;
删除表、列和索引的统计信息
analyze table table_name delete statistics;
一次性收集表、所有列和索引的统计信息
analyze table table_name compute statistics;
使用dbms_stats收集统计信息的方法
dbms_stats做常用的四个存储过程:
gather_table_stats:用于收集表、列和索引的统计信息。
gather_index_stats:用于收集索引的统计信息。
gather_schema_stats:用于收集指定schema下的所有对象的统计信息。
gather_database_stats:用于全数据库的所有对象的统计信息。
analyze命令可以做到只收集列而不收集表的统计信息,而dbms_stats做不到这一点。
删除表、列和索引的统计信息
dbms_stats.delete_table_stats(ownname='>SCOTT',tabname=>'T2')
一次性收集表、列和索引的统计信息
dbms_stats.gather_table_stats(ownname=>'SCHEMA_NAME',tabname=>'TABLE_NAME',esmite_percent=>100,cascade=true);
analyze和dbms_stats的区别
1.analyze不能收集分区表的统计信息,而dbms_stats可以
2.analyze不能并行收集统计信息,而dbms_stats可以