修改统计信息值恢复Oracle执行计划

经常会遇到由于日期字段统计信息的边界值不准确,导致Oracle SQL执行计划发生改变,通常是最大值没有及时更新或者最大值过大。

下面是遇到的一个案例,SQL的执行计划突然改变,原先使用的是index range scan,突然变成了index full scan。 导致SQL语句非常缓慢。

点击(此处)折叠或打开

  1. select count(*) from prd_t1 where input_date>trunc(sysdate-1)
  2. and input_date

原来的执行计划:

点击(此处)折叠或打开

  1. SQL> select count(*) from prd_t1 where input_date > trunc(sysdate);
  2. COUNT(*)
  3. ----------
  4. 193311
  5. Execution Plan
  6. ----------------------------------------------------------
  7. 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=8)
  8. 1 0 SORT (AGGREGATE)
  9. 2 1 INDEX (RANGE SCAN) OF 'IDX_PRD_T1' (NON-UNIQU
  10. E) (Cost=4 Card=2 Bytes=16)

变差的执行计划:

点击(此处)折叠或打开

  1. SQL> select count(*) from prd_t1 where input_date > trunc(sysdate);
  2. COUNT(*)
  3. ----------
  4. 193311
  5. Execution Plan
  6. ----------------------------------------------------------
  7. 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=8)
  8. 1 0 SORT (AGGREGATE)
  9. 2 1 INDEX (FAST FULL SCAN) OF 'IDX_PRD_T1' (NON-UNIQU
  10. E) (Cost=6458 Card=6130163 Bytes=49041304)

检查和字段的统计信息有关系,字段input_date的最小值和最大值分别是18-JAN-2016和15-MAY-2026。所以选择了fast full scan。

修改完最大值和最小值,执行计划恢复成使用rang scan

点击(此处)折叠或打开

  1. SQL> select table_name,TO_CHAR(TO_DATE(TRUNC(ENDPOINT_VALUE),'J'),'DD-MON-YYYY')
  2. 2 from dba_tab_histograms where table_name='PRD_T1' and column_name='INPUT_DATE';
  3. TABLE_NAME TO_CHAR(TO_DATE(TRUNC(ENDPOINT
  4. ------------------------------ ------------------------------
  5. PRD_T1 19-APR-2016
  6. PRD_T1 18-APR-2017

具体方法如下:

点击(此处)折叠或打开

  1. DECLARE
  2. srec DBMS_STATS.STATREC;
  3. v_distcnt NUMBER;
  4. v_density NUMBER;
  5. v_nullcnt NUMBER;
  6. v_avgclen NUMBER;
  7. numvals DBMS_STATS.NUMARRAY;
  8. charvals DBMS_STATS.CHARARRAY;
  9. datevals DBMS_STATS.DATEARRAY;
  10. BEGIN
  11. -- Date Type
  12. DBMS_STATS.get_column_stats (ownname => 'DBO',
  13. tabname => 'PRD_T1',
  14. colname => 'INPUT_DATE',
  15. distcnt => v_distcnt,
  16. density => v_density,
  17. nullcnt => v_nullcnt,
  18. srec => srec,
  19. avgclen => v_avgclen
  20. );
  21. datevals := DBMS_STATS.datearray (sysdate-365, sysdate);
  22. DBMS_STATS.prepare_column_values (srec, datevals);
  23. DBMS_STATS.set_column_stats (ownname => 'DBO',
  24. tabname => 'PRD_T1',
  25. colname => 'INPUT_DATE',
  26. distcnt => v_distcnt,
  27. density => v_density,
  28. nullcnt => v_nullcnt,
  29. srec => srec,
  30. avgclen => v_avgclen
  31. );
  32. COMMIT;
  33. END;
  34. /

Chinfa DRA480-24A相关推荐

  1. 1.24A Simple Math Problem

    原网址:https://acs.jxnu.edu.cn/problem/NOIOPJCH02077215 描述: Huanhuan challenges you to a simple math pr ...

  2. 节能无线信标Ver0:功率测试

    文章目录 ▌01 节能无线信标 1.测试背景 2.上次调试故障 ▌02 功率发送电路调试 1.故障检测 2.测试输出 (1)没有加输出线圈 (2)增加发送线圈 3.频率与空载电流 (1)ARR与空载电 ...

  3. 【连载】物联网全栈教程-从云端到设备(十三)---安装单片机编译环境

    物联网全栈教程-从云端到设备(十三) 一 很多朋友一听说要搞硬件总觉得还要重新学习很多电路基础知识,零妖告诉你这是个错误的想法.如果在十年前你这么想那么我是非常支持你的,但是在物联网时代你需要改变一下 ...

  4. Flash使用域内存api的MD5,速度超快!

    为什么80%的码农都做不了架构师?>>>    Adobe官网提供的as3corelib-.93包中的MD5,对稍大的数据执行速度都很慢,原因是代码对Flash执行机制没有针对性优化 ...

  5. Ext2、Ext3和Ext4之间的区别

    ext2与ext3 Linux ext2/ext3文件系统使用索引节点来记录文件信息,作用像windows的文件分配表.索引节点是一个结构,它包含了一个文件的长度.创建及修改时间.权限.所属关系.磁盘 ...

  6. 安振平老师的4911号不等式问题的证明

    题目:设$a,b,c\geq 0$,且$a+b+c=1$,求证:$\frac{1}{a^2-4a+9}+\frac{1}{b^2-4b+9}+\frac{1}{c^2-4c+9}+\frac{1}{1 ...

  7. y电容如何选型_常用电子元器件分类选型以及单端反激正激变压器设计 (MOS管、电感部分)...

    ▲ 点击上方 21Dianyuan 关注我们 本文是 21Dianyuan 社区原创 技术文章,作者 xueyiranpiao,感谢作者的辛苦付出. 本文将分以下几个部分进行分享: ▪ 保险丝 ▪ 压 ...

  8. ext2和ext3文件系统知识

    Linux ext2/ext3文件系统使用索引节点来记录文件信息,作用像windows的文件分配表.索引节点是一个结构,它包含了一个文件的长度.创建及修改时间.权限.所属关系.磁盘中的位置等信息.一个 ...

  9. apache arrow mysql_新手搭建PHP环境必备知识:windows下PHP5+APACHE+MYSQ完整配置(个人总结)...

    经过一段时间狂热的PHP编程,对WINDOWS平台下PHP的配置可算是深有感触,一开始我用的是一键安装的傻瓜包,但是考虑傻瓜包的安装版本已经落后,在真正手动配置PHP环境时遇到许多问题,在查阅了许多资 ...

最新文章

  1. nginx系列:nginx反向缓存代理详解
  2. linux设备驱动之pci设备的驱动架构
  3. Linux中kill,pkill,killall和xkill命令汇总讲解
  4. html 无效源,IE bug无效源HTML5音频 - 解决方法
  5. js(Dom+Bom)第五天(1)
  6. 使用Spring Data R2DBC进行异步RDBMS访问
  7. idea报“Usage of API documented as @since 1.7”这一问题的解决方法
  8. 有助于改变你命运的5个处世潜规则
  9. 从华为“流程与IT管理部”看IT部门定位
  10. [转载] lstm时间序列预测_pytorch入门使用PyTorch进行LSTM时间序列预测
  11. 微型计算机系统软件包括哪些,计算机的软件系统包括哪些内容
  12. Python - PyMuPDF (fitz) 处理 PDF
  13. TCP RTT测量妙计
  14. 养老保险和住房公积金如何转移
  15. Redis安装配置说明
  16. 数字中国城市巡礼之开封:千年古都的智慧新生
  17. 斗破苍穹里的那些女人
  18. 2010考研数学二第(11)题——高阶导数
  19. python中set如何添加元素_python中如何在set中添加元素?语句是什么
  20. PTA基础编程题目集

热门文章

  1. 蚂蚁运花生的案例[转]
  2. 《物理光学》——光的衍射
  3. RK3568平台开发系列讲解(驱动篇)驱动开发之RTC 使用
  4. java使用selenium实现模拟浏览器操作API大全 模拟登录
  5. outlook 2016 邮件怎么显示图片
  6. filemanager-webpack-plugin 打包自动压缩zip
  7. python做外贸_跟着销售学python(3)---开发微信公平台(1)
  8. 建立互信及追求卓越的环境
  9. InjectFix原理学习(实现修复加法的热更)
  10. 项目经理如何提升核心竞争力,给自己增值