ITPub博客

首页 > Linux操作系统 > Linux操作系统 > method_opt的作用

method_opt的作用

原创 Linux操作系统 作者:myownstars 时间:2013-06-09 21:56:49 0 删除 编辑

https://blogs.oracle.com/optimizer/entry/how_does_the_method_opt 

method_opt选项的作用

收集基本列信息

创建直方图

收集扩展统计信息


method_opt的组成

有多个部分,前2个必须指定,

第一部分: 收集基本信息(min,max,NDV,nulls数),默认为for all columns;如果某列没有被指定,则只记录其平均列长度;

第二部分: 创建直方图,默认为auto,可指定1--254的整数值,也可使用repeat/skewonly

For all [indexed|hidden] columns size [size_clause]

<-------  first part-----------> <-- second part -->


如何只对特定列收集直方图

使用for columns选项

假定只对sales表的method_opt收集直方图

dbms_stats.gather_table_stats('SH','SALES',method_opt =>'FOR ALL COLUMNS SIZE 1 FOR COLUMNS SIZE 354 CUST_ID')



如何跳过某列收集统计信息

oracle没有提供相应API,不过可以逆向思维,即显示指定其余列

假定不对sales表的prod_id收集统计信息

dbms_stats.delete_column_stats('SH','SALES','PROD_ID');

dbms_stats.gather_table_stats('SH','SALES','FOR COLUMNS SIZE 254 CUST_ID TIME_ID CHANNEL_ID');

SELECT column_name, num_distinct, histogram  FROM   user_tab_col_statistics  WHERE  table_name = 'SALES'

--该查询便不会显示prod_id列信息

注:for columns只适用于gather_table_stats,11g可通过set_table_prefs将上述定制行为设为默认选项



如何不对某列收集直方图

11g

可利用新功能set_table_prefs

删除该列直方图:dbms_stats.delete_column_stats( ownname=>'SH', tabname=>'SALES', colname=>'PROD_ID', col_stat_type=>'HISTOGRAM');

设置pref:dbms_stats.set_table_prefs('SH', 'SALES','METHOD_OPT', 'FOR ALL COLUMNS SIZE AUTO, FOR COLUMNS SIZE 1 PROD_ID');

10g

删除该表信息并将其锁定;

dbms_stats.delete_table_stats(ownname=>'SH', tabname=>'SALES');

dbms_stats.lock_table_stats(ownname=>'SH', tabname=>'SALES');

单独创建一个job对其收集信息;

BEGIN

dbms_stats.gather_table_stats('SH', 'SALES',method_opt=>'FOR ALL COLUMNS SIZE AUTO FOR COLUMNS SIZE 1 PROD_ID',force => true);

END;

https://blogs.oracle.com/optimizer/entry/how_do_i_drop_an_existing_histogram_on_a_column_and_stop_the_auto_stats_gathering_job_from_creating 

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

请登录后发表评论 登录
全部评论

注册时间:2010-03-18

  • 博文量
    375
  • 访问量
    3320732