method_opt

参考:https://blogs.oracle.com/optimizer/entry/how_does_the_method_opt
            http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#i1036461

DBMS_STATS这个包在做分析时经常会用到,包里有个参数叫method_opt,说道说道

1.从语法上看基本有两种格式

?FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]        //从所有列,到进行一些限制

?FOR COLUMNS [size clause] column [size_clause] [,column [size_clause]...]

size_clause is defined as size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}            //REPEAT是继承之前的bucket数量,SKEW是倾斜的意思


默认格式是 FOR ALL COLUMNS SIZE AUTO.

2.从作用上看,主要有三方面
a).控制对哪些列做/不做统计
b).控制基于哪些列创建直方图
c).扩展统计(说白了,就是对几个列之前组合进行统计分析

把前两个功能综合一下,主要有四种可能
a).做统计/做直方图
b).做统计/不做直方图
c).不做统计/做直方图
d).不做统计/不做直方图

后边两个既然都不做统计了,我们也就没有讨论的必要了
来看前两个,前面讲过,无论是统计还是做直方图,都是基于列的,这就牵扯到对列的选取上,是所有列,还是特定的某个列

for aaa columns size n1 for columns size n2 [bbb,ccc]

第一部分描述大部分列怎么样,第二部分则描述特定列怎么样
如果说所有列都做统计,但只有列ID做直方图,那么语法是
for all columns size 1 for columns size 254 id
其中size为1表示不做直方图

扩展统计感觉有点像补充日志(supplemental log data)可以对列与列之间的关系做统计和分析
举例:如果想对列FLAG1和FLAG2之间做组合分析,可以写成这样
dbms_stats.gather_table_stats('SH', 'SALES',method_opt => 'FOR ALL COLUMNS SIZE 254 FOR COLUMNS SIZE 254 (FLAG1, FLAG2)');
这样做以后,在查询视力user_tab_col_statistics时会发现,oracle给你组合起来的列起了个新名字

 

A>select column_name,num_distinct,histogram from user_tab_col_statistics where table_name='T';

COLUMN_NAME                    NUM_DISTINCT HISTOGRAM
------------------------------ ------------ ---------------
FLAG1                                     2 FREQUENCY
FLAG2                                     2 FREQUENCY
SYS_STUGVNB7PTIYWAVPJX#YT77WGD            2 FREQUENCY

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

转载于:http://blog.itpub.net/29646619/viewspace-1163282/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值