这是以前的一次SQL查询调优的经历,在这个例子中,由于SQL编写不合理,导致历史日志数据查询特别慢。这个例子的特点,是错误比较隐蔽,初学者很容易犯这种错误。下面就以实际的例子来说明。

当前日期:2015年6月25日。

SQL1:

select count(1)

from t_brm_uw_process_log L

where L.begin_time >= to_date('2014-12-30', 'yyyy-mm-dd')

and L.end_time <= to_date('2014-12-30', 'yyyy-mm-dd') + 1;

结果:5000条记录,执行时间3秒

SQL2:

select count(1)

from t_brm_uw_process_log L

where L.begin_time >= to_date('2015-6-24', 'yyyy-mm-dd')

and L.end_time <= to_date('2015-6-25', 'yyyy-mm-dd') + 1;

结果:30000条记录,执行时间0.2秒

类似的SQL,只是时间范围不一样,begin_time字段上有建索引,为什么SQL2执行更快?

SQL1执行计划:

没有走索引。

SQL2执行计划:

有走索引。

SQL2执行快是因为走了索引,可是SQL1为什么不走索引?

尝试方法1:

针对指定索引重建

ALTER INDEX IDX_BRM_UW_PROCESS_LOG_BG_TIME REBUILD;

无效。

尝试方法2:

是否统计信息不对?需要重建统计信息

直接查询数量,是840万条记录

oracle统计值查看

select DT.NUM_ROWS, --行数

DT.LAST_ANALYZED, --最后分析日期

DT.*

from dba_tables DT

where table_name = 'T_BRM_UW_PROCESS_LOG';

结果:

行数:8379665

最后分析日期:2015/6/23 22:03:44

看起来统计信息也是对的。

失败

最后突然脑子中突然灵光一现,终于发现了问题所在:

SQL写错了!

SQL中两个条件都应该是begin_time为条件,结果第二个条件写成了end_time,导致查询历史日志的时候,根据索引字段begin_time查询出来的数据范围过大,COST太高而不走索引了。

问题原因找到了,改写就很简单了,正确的SQL写法:

select count(1)

from t_brm_uw_process_log L

where L.begin_time >= to_date('2014-12-30', 'yyyy-mm-dd')

and L.begin_time <= to_date('2014-12-30', 'yyyy-mm-dd') + 1;

润乾单查日期特别慢_SQL编写不合理导致历史日志查询特别慢相关推荐

  1. 润乾报表-时间日期函数

    时间日期函数 1.now() 函数说明: 获得系统此刻的日期时间 语法: now() 返回值: 日期时间 2.year() 函数说明: 从日期型数据中获得年信息 语法: year(dateExp) 参 ...

  2. 使用润乾报表的常见问题

    最近工作需要,使用了润乾报表.润乾报表是一个纯JAVA的企业级报表工具,功能很强大,可以做很多事情,可以做非常复杂的报表,不过我用到的比较简单,所以这里也就总结了一些比较基本和常见的问题. Q:设计器 ...

  3. java web 润乾报表教程_润乾报表开发 基础教程.ppt

    润乾报表开发 --基础教程 主格和附属格 单元格进行扩展的过程中,缺省情况下,相对于其右(下)边的单元格而言,扩展格是主动复制的,被称为其它格(其右/下的格)的主格,而其右(下)的单元格是被动跟随复制 ...

  4. 右边补0 润乾报表_关于润乾报表的补充说明 -

    分页说明:为方便大家开发,本人在工资系统中作出一个DEMO,经过测试后能正常使用.先将部分代码与注意事项发给大家看一下 第一步: 如果该报表需要分页的话,请将下面的 替换掉原先的. 第二步: 增加 $ ...

  5. 润乾集算报表多样性数据源之动态SQL传递

    大多数情况下报表的数据源SQL都是固定的,但有时也需要动态变动其中某些部分实现动态拼出,比如在报表应用中允许用户通过选择表和字段查询自己关心的报表数据,报表开发时则希望对同类报表(明细或汇总)使用同一 ...

  6. 润乾报表实现无数据源的规则报表及改进

    某报表系统中有部分报表需要按照一定规则显示数据,如:显示查询日期范围内的奇数日数据,要求数据库中即使无记录该日期也显示(内容为空). 本文重点来实现奇数日期序列,数据区不是重点,故置空. 以上述报表需 ...

  7. 润乾报表分组求和_实现报表数据预先计算

    报表应用中,如果数据量较大或计算过程较复杂,往往会导致报表数据源准备过慢,从而影响报表性能.这种情况下可以预先计算报表需要的数据,在呈现时直接引用,使得用户在访问报表时可以迅速地获得响应. 一.当前的 ...

  8. java web 润乾报表教程_润乾报表 dashboard 分析

    在<润乾报表多维分析功能漫游>一文中我们已经见识了润乾报表分析控件的妙处:可视化的拖拽模式,灵活的计算方式,脱离敲打复杂多变的查询语句,只需要动动鼠标就可以获取所需要的数据.除了多维分析外 ...

  9. 润乾报表CookBook与使用

    part1 1. 数据源相关 1.1 报表工具连接文本数据 1.2 报表工具连接非关系数据库(待补充) 1.3 报表异构数据源关联混算 1.4 报表工具 json 数据源 1.5 报表工具连 sap ...

最新文章

  1. Linux 0.12内核与现代内核在内存管理上的区别
  2. centos 安装jdk
  3. java idea 模块_使用IntelliJ IDEA搭建多maven模块JAVA项目
  4. SAP License:SAP顾问食品行业概述
  5. 025Python路--安装第三方模块
  6. 解决MybatisPlus修改时空字段不修改问题
  7. Spring之IOC容器
  8. matlab 正弦波 fft,【求助】正弦信号序列fft频谱分析!!!
  9. 快速创建ppt中的动画效果图。
  10. 布丰投针实验 MATLAB仿真 以及报告
  11. 所有家中常见物品的英文单词
  12. 蓝桥杯之单片机学习(三)——共阳数码管的静态显示
  13. 适量饮酒,对身体好?医生说:恰恰相反!
  14. 《枪炮、病菌与钢铁》之一
  15. Linux网络设置(linux相关网络命令大全)
  16. 诺基亚N95手机使用技巧
  17. IDEA上传项目到GitHub
  18. 木马编程入门_逆向入门分析实战(一)
  19. Realme GT ROOT 解锁BL教程
  20. (附源码)计算机毕业设计高校教务管理系统

热门文章

  1. Windows中查看端口占用情况
  2. chrome导出插件
  3. Django框架——HttpResponse对象
  4. Python多任务——线程
  5. FreeTextBox 3.1.6 的实践总结和几个问题
  6. 标准C/C++程序通过gSOAP调用WebService
  7. 基于LINQ to SQL的WEB开发三层架构(2)
  8. jdbc原子事务的实现
  9. [深度学习]人脸检测-Tensorflow2.x keras代码实现
  10. 面试题 08.09. 括号