㈠ 先看两个来自生产环境的真实案例:

㈡ 原理:

Oracle 在对于 varchar等字符型字段收集统计信息时,并不会对每个值都进行精确的统计

而是,对值进行substr(,32)。一般来讲,这种方式没有什么问题

但是,如果恰巧列中存储的数据,前32bytes相同,那么,Oracle 的统计就会与实际情况不符

㈢ 测试:

hr@ORCL> drop table t purge;

Table dropped.

hr@ORCL> create table t (id number,name varchar2(300));

Table created.

hr@ORCL> create index idx_t on t (name);

Index created.

hr@ORCL> insert into t select rownum,lpad(\'a\',6,\'a\')||to_char(rownum) from dba_objects;

50322 rows created.

hr@ORCL> commit;

Commit complete.

hr@ORCL> exec dbms_stats.gather_table_stats(user,\'T\',null,null,method_opt=>\'for columns size 254 name\',cascade=>true);

PL/SQL procedure successfully completed.

hr@ORCL> select column_name, endpoint_actual_value

2 from user_tab_histograms

3 where table_name = \'T\'

4 and rownum<5

5 order by column_name, endpoint_Number;

COLUM ENDPOINT_ACTUAL_VALUE

----- --------------------------------------------------

NAME aaaaaa46556

NAME aaaaaa46734

NAME aaaaaa46912

NAME aaaaaa47090

hr@ORCL> truncate table t;

Table truncated.

hr@ORCL> insert into t select rownum,lpad(\'a\',31,\'a\')||to_char(rownum) from dba_objects;

50322 rows created.

hr@ORCL> exec dbms_stats.gather_table_stats(user,\'T\',null,null,method_opt=>\'for columns size 254 name\',cascade=>true);

PL/SQL procedure successfully completed.

hr@ORCL> select column_name, endpoint_actual_value

2 from user_tab_histograms

3 where table_name = \'T\'

4 and rownum<5

5 order by column_name, endpoint_Number;

COLUM ENDPOINT_ACTUAL_VALUE

----- --------------------------------------------------

NAME aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1

NAME aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2

NAME aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3

NAME aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4

hr@ORCL> truncate table t;

Table truncated.

hr@ORCL> insert into t select rownum,lpad(\'a\',32,\'a\')||to_char(rownum) from dba_objects;

50322 rows created.

hr@ORCL> exec dbms_stats.gather_table_stats(user,\'T\',null,null,method_opt=>\'for columns size 254 name\',cascade=>true);

PL/SQL procedure successfully completed.

hr@ORCL> select column_name, endpoint_actual_value

2 from user_tab_histograms

3 where table_name = \'T\'

4 and rownum<5

5 order by column_name, endpoint_Number;

COLUM ENDPOINT_ACTUAL_VALUE

----- --------------------------------------------------

ID

ID

NAME

㈣ 解决方案:

删除索引列的直方图

例子:

SQL> begin

dbms_stats.gather_table_stats(ownname => \'HR\',

tabname => \'T\' ,

estimate_percent => null ,

method_opt => \'for columns SIZE 1 name\' ,

cascade => true);

end;

/

oracle删除列的限制,深入理解Oracle索引(10):索引列字符类型统计信息的32位限制...相关推荐

  1. oracle 10046详解,深入理解Oracle调试事件:10046事件详解

    之前也写过一篇10046的文章:10046简介 今天,Think想和大家一起共同深入去理解一下Oracle的这些调试事件 10046事件是SQL_TRACE的扩展,被戏称为"吃了兴奋剂的SQ ...

  2. oracle每个租户指定字符集,理解 Oracle 多租户体系中(12c,18c,19c)创建用户作用域范围...

    本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个可以成功创建用户? 1. 在CDB级别中创建公共用户,不带 container 子句的效果: 2. 在CDB级别中创建公共用户,带 cont ...

  3. 学习笔记(十一)——数据库的索引碎片、计划缓存、统计信息

    1.索引碎片 数据库存储本身是无序的,建立了聚集索引,会按照聚集索引物理顺序存入硬盘.既键值的逻辑顺序决定了表中相应行的物理顺序 而且在大多数的情况下,数据库写入频率远低于读取频率,索引的存在为了读取 ...

  4. oracle cur notfound,%notfound的理解——oracle存儲過程 | 學步園

    文檔中的解釋:It returns TRUE if an INSERT, UPDATE, or DELETE statement affected no rows, or a SELECT INTO ...

  5. Oracle GoldenGate 系列:深入理解 Oracle GoldenGate 检查点机制

    检查点将进程的当前读写位置存储在磁盘中用于恢复目的.检查点不仅可以真实地标记 Extract进程捕获的要进行同步的数据变化以及 Replicat进程应用到 target数据库的数据变化,防止进程进行冗 ...

  6. oracle 几种锁,oracle_基于oracle中锁的深入理解,ORACLE里锁有以下几种模式:0:no - phpStudy...

    基于oracle中锁的深入理解 ORACLE里锁有以下几种模式:0:none 1:null 空 2:Row-S 行共享(RS):共享表锁 3:Row-X 行专用(RX):用于行的修改 4:Share ...

  7. 深入理解Oracle直方图

    直方图是一种按数据出现的频率来进行分类存储的方法.在Oracle中直方图是用来描述表中列数据的分布情况.每一个sql在被执行前都要经过优化这一步骤那么在优化器给出一个最优执行计划之优化器应该要知道sq ...

  8. oracle 抽样_深入理解Oracle动态采样

    Oracle 动态采样( Dynamic Sampling , 12c 称为 Dynamic statistics) ,是对统计信息的⼀一个重要补充,当数 据动态变化,⽆无法⽤用典型的统计信息描述时, ...

  9. Oracle收集统计信息

    Oracle收集统计信息 优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN: 列统计: --列中唯一值的数量(NDV ...

最新文章

  1. 合作开发用到的几个 设计模式
  2. 上云上的差点破产是什么体验?
  3. 在Hadoop 2.3上运行C++程序各种疑难杂症(Hadoop Pipes选择、错误集锦、Hadoop2.3编译等)
  4. Anaconda python3.6版本下载
  5. 重定向与跳转的区别 .
  6. P3648-[APIO2014]序列分割【斜率优化】
  7. react 交互_如何在React中建立动画微交互
  8. android 抓取webview中的所有图片_Python|任意网页中的所有图片下载
  9. Linux 写入ntfs很慢,ntfs-3g 写入 速度优化
  10. C++ array vector 数组
  11. ESP8266教程——采用AT指令
  12. python实现简易万年历_Python编程——万年历
  13. arm体系结构:arm920t
  14. 印度软件外包领军企业上演安然门
  15. 【Unity3D-UGUI原理篇】(二)Canvas Scaler 缩放原理
  16. xcopy 复制目录及子目录
  17. python爬虫-网易云音乐的歌曲热评
  18. 用墨刀进行简单的后台页面设计
  19. 网络直播平台搭建一个直播间的礼物系统
  20. java实列方法和静态方法_静态方法,类方法和实例方法

热门文章

  1. 大白话5分钟带你走进人工智能-第二十四节决策树系列之分裂流程和Gini系数评估(3)...
  2. 用js实现图片的无缝滚动效果
  3. input里面check 状态检测
  4. 【vim】vim常用命令
  5. 聚集索引与非聚集索引及其查询效率【转载】
  6. 理解去中心化稳定币DAI
  7. 绿盟科技亮相中国石油石化企业信息技术交流大会
  8. bzoj3275 Number
  9. 程序猿生存定律--表达背后的力量(1)
  10. 【服务器环境搭建-Centos】tmpfs,【转载】