ITPub博客

首页 > 数据库 > Oracle > Oracle直方图 32字节限制

Oracle直方图 32字节限制

原创 Oracle 作者:csbin 时间:2014-01-26 09:23:44 0 删除 编辑

1、创建测试表

create table t as 
select rownum rn,
       object_name,
       rpad('*', 32, '*') || object_type object_type
  from all_objects
 where rownum <= 10000;
   
select object_type ,count(1) from t group by object_type;

 

2、收集统计信息

begin 
  dbms_stats.gather_table_stats(user,
                                'T',
                                method_opt => 'FOR COLUMNS object_type SIZE 254');
end;
/

select *
  from t
 where object_type = '********************************TABLE';

3、查看直方图

select table_name,
       column_name,
       --endpoint_value,
       --endpoint_number,
       endpoint_actual_value,
       endpoint_number - lag(endpoint_number, 1, 0) over(order by endpoint_number) as frequency
  from user_tab_histograms
 where table_name = 'T'
 --and endpoint_number > 0
 --and endpoint_actual_value is not null
 order by 1, 2, 4;

 

image

4、更新列,收集统计信息,查询直方图

update t set object_type = substr(object_type, 2);

image

从上面的结果看,oracle直方图的取值,仅取32位。

如果前32位相同,收集直方图后,oracle会认为是相同的,导致生成错误的执行计划。

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

下一篇: 临时表空间监控
请登录后发表评论 登录
全部评论

注册时间:2009-01-12

  • 博文量
    69
  • 访问量
    1458788