观察analyze table compute statistics 都对什么对象统计了信息

观察analyze table  compute statistics  都对什么对象统计了信息

analyze table  compute statistics  = analyze table compute statistics for table for all indexes for all columns;
比analyze table compute statistics for table for all indexes for all  indexed columns 分析了更多的信息
但这里并不是鼓励使用 analyze table   的方法进行分析。

SQL> create table t as select * from all_objects;
Table created.

SQL> create index t_idx on t(object_id);
Index created.

SQL> analyze table t compute statistics for table
  2  for all indexes for all indexed columns;

Table analyzed.

SQL> select t.num_rows, i.num_rows, c.cnt
  2   from (select num_rows from user_tables where table_name = 'T') t,
  3   (select num_rows from user_indexes where table_name = 'T' ) i,
  4   (select count(distinct column_name) cnt from user_tab_histograms where tab
le_name = 'T' ) c
  5  /

  NUM_ROWS   NUM_ROWS        CNT
---------- ---------- ----------
     31213      31213          1  《------在这里 因为只有1列建立有索引,因此user_tab_histograms 只统计了object_id列的数据分布,这里object_id因为唯一,所以是均匀分布的

SQL> analyze table t delete statistics;

Table analyzed.

SQL>  select t.num_rows, i.num_rows, c.cnt
  2    from (select num_rows from user_tables where table_name = 'T') t,
  3    (select num_rows from user_indexes where table_name = 'T' ) i,
   4   (select count(distinct column_name) cnt from user_tab_histograms where ta
ble_name = 'T' ) c;

  NUM_ROWS   NUM_ROWS        CNT
---------- ---------- ----------
                               0

SQL> analyze table t compute statistics;

Table analyzed.

SQL>  select t.num_rows, i.num_rows, c.cnt
    2  from (select num_rows from user_tables where table_name = 'T') t,
   3   (select num_rows from user_indexes where table_name = 'T' ) i,
    4  (select count(distinct column_name) cnt from user_tab_histograms where ta
ble_name = 'T' ) c;

  NUM_ROWS   NUM_ROWS        CNT
---------- ---------- ----------
     31213      31213         13  〈------统计了所有的列,但这些列并不是都用在 where col='X' 上的,因此很多信息其实都没有实际意义。


DBMS_STATS 和TABLE的MONITOR结合,可以当表数据量发生10%的变化的时候,自动重新收集统计信息。
我平常更喜欢使用SIZE SKEWONLY  分析histograms

==========================================================================
analyze table t compute statistics = analyze table t compute statistics for table for all indexes for all columns
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
当analyze table t delete statistics 会删除所有的statistics

===========================================================================[Q]怎么样分析表或索引
[A]命令行方式可以采用analyze命令
如Analyze table tablename compute statistics;
Analyze index|cluster indexname estimate statistics;
ANALYZE TABLE tablename COMPUTE STATISTICS
FOR TABLE
FOR ALL [LOCAL] INDEXES
FOR ALL [INDEXED] COLUMNS;
ANALYZE TABLE tablename DELETE STATISTICS
ANALYZE TABLE tablename VALIDATE REF UPDATE
ANALYZE TABLE tablename VALIDATE STRUCTURE
[CASCADE]|[INTO TableName]
ANALYZE TABLE tablename LIST CHAINED ROWS [INTO TableName]
等等。
如果想分析整个用户或数据库,还可以采用工具包,可以并行分析
Dbms_utility(8i以前的工具包)
Dbms_stats(8i以后提供的工具包)

dbms_stats.gather_schema_stats(User,estimate_percent=>100,cascade=> TRUE);
dbms_stats.gather_table_stats(User,TableName,degree => 4,cascade => true);
这是对命令与工具包的一些总结
1、对于分区表,建议使用DBMS_STATS,而不是使用Analyze语句。
a) 可以并行进行,对多个用户,多个Table
b) 可以得到整个分区表的数据和单个分区的数据。
c) 可以在不同级别上Compute Statistics:单个分区,子分区,全表,所有分区
d) 可以倒出统计信息
e) 可以用户自动收集统计信息
2、DBMS_STATS的缺点
a) 不能Validate Structure
b) 不能收集CHAINED ROWS, 不能收集CLUSTER TABLE的信息,这两个仍旧需要使用Analyze语句。
c) DBMS_STATS 默认不对索引进行Analyze,因为默认Cascade是False,需要手工指定为True
3、对于oracle 9里面的External Table,Analyze不能使用,只能使用DBMS_STATS来收集信息。

==================================================================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值