ANALYZE的介绍

 

 

  使用ANALYZE可以收集或删除对象的统计信息、验证对象的结构、标识表或cluster中的行迁移/行链接信息等。官方文档关于ANALYZE功能介绍如下:

 

·         Collect or delete statistics about an index or index partition, table or table partition, index-organized table, cluster, or scalar object attribute.

 

·         Validate the structure of an index or index partition, table or table partition, index-organized table, cluster, or object reference (REF).

 

·         Identify migrated and chained rows of a table or cluster.

·          

 

 

ANALYZE的使用

 

 

ANALYZE TABLE可以指定分析: 表、所有字段、所有索引字段、所有索引。 若不指定对应对象则表示全部都分析

 

 

#完全分析,采样100%

 

 

ANALYZE TABLE TABLE_NAME COMPUTE STATISTICS; 

 

ANALYZE TABLE TABLE_NAME COMPUTE STATISTICS FOR TABLE FOR ALL COLUMNS FOR ALL INDEXES;

 

 

注意:上面两者是等价的。

 

 

 

#抽样分析,采样40%

 

 

ANALYZE TABLE TABLE_NAME ESTIMATE STATISTICS SAMPLE 40 PERCENT;

 

对于大表而言,收集统计信息相当于全表扫描,相当耗费时间和资源,可以用抽样估算法来收集统计信息,这样就可以节省时间和资源,如果不是要求要有精确数据的话,尽量采用抽样分析法。可以指定采样比例。

 

 

 

分析表统计信息

 

 

#仅仅生成表的statistics,不生成列的直方图信息

 

ANALYZE TABLE TABLE_NAME COMPUTE STATISTICS FOR TABLE;

 

 

分析索引字段统计信息

 

#分析了表,并仅对表上的索引列产生histograms

 

ANALYZE TABLE TEST COMPUTE STATISTICS FOR ALL INDEXED COLUMNS;

 

 

分析指定列统计信息

 

 

ANALYZE TABLE TEST COMPUTE STATISTICS FOR  COLUMNS COLUMN_NAME1, COLUMN_NAME2;

 

 

分析所有列统计信息

       

#分析表,同时生成所有列的histograms

 

ANALYZE TABLE TEST COMPUTE STATISTICS FOR ALL COLUMNS;

 

 

 

分析索引统计信息

 

 

#指定索引分析

 

SQL> ANALYZE INDEX INDEX_NAME COMPUTE STATISTICS ;

 

#分析所有索引

 

SQL> ANALYZE TABLE TABLE_NAME COMPUTE STATISTICS FOR ALL INDEXES;

 

 

 

删除统计信息

 

 

#删除统计分析数据

ANALYZE TABLE <TABLE_NAME> DELETE STATISTICS;

 

#删除索引对应的统计信息

ANALYZE INDEX <INDEX_NAME> DELETE STATISTICS;

 

 

#注意:下面这种语法是错误的,见过有些文章有介绍这种方法。

ANALYZE TABLE <TABLE_NAME> DELETE STATISTICS FOR TABLE;

ANALYZE TABLE <TABLE_NAME> DELETE STATISTICS FOR ALL INDEXES;

ANALYZE TABLE <TABLE_NAME> DELETE STATISTICS FOR ALL INDEXEXED COLUMNS;

 

#注意:TRUNCATE命令不会修改数据的统计信息,也就是如果我们想让CBO利用合理利用数据的统计信息的时候,需要我们及时的使用ANALYZE命令或者dbms_stats重新统计数据的统计信息

 

 

下面我们以具体的例子来看看ANALYZE命令会分析、收集那些统计信息:

 

 

SQL> CREATE TABLE TEST
  2  AS
  3  SELECT * FROM DBA_OBJECTS;
SQL> 
SQL> CREATE INDEX IX_TEST_N1 ON TEST( OBJECT_NAME);

相关文章:

  • 2022-02-05
  • 2022-12-23
  • 2021-09-19
  • 2021-09-19
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-12
  • 2022-12-23
  • 2022-12-23
  • 2021-11-30
  • 2021-11-11
  • 2021-12-15
  • 2021-05-22
相关资源
相似解决方案