转:analyze table compute statistics

http://www.cnblogs.com/rootq/archive/2009/02/01/1382197.html

观察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 的方法进行分析。

[2005/07/16增加]http://www.itpub.net/showthread.php?s=&threadid=390929 讨论了不垃圾广告式分析,oracle默认产生的HISTOGRAMS不同。作为本文章的补充。


观察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 分析histograms1382197.html?type=1&webview=1


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/230160/viewspace-590845/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/230160/viewspace-590845/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值