DB2 char()函数引起全表扫描
2019独角兽企业重金招聘Python工程师标准>>>
解决方法是情愿多几次访问数据库,增加 Where 条件 缩小检索范围,不要用连接
原代码:
List l = new ArrayList();
StringBuffer sql = new StringBuffer(); sql.append("select log.LOGID,log.LASID,customerinfo.REALNAME,customer.IDTYPE,char(date(log.OPERATEDATE))||' '||char(time(log.OPERATEDATE)),log.OPERATETYPE,");
sql.append("log.OPERATECODE,log.PRINTSTATE,log.FIRSTPRINTDATE,log.LASTPRINTDATE,log.LASTPRINTCODE,");
sql.append("log.EMAILSTATE,log.FIRSTEMAILDATE,log.LASTEMAILDATE,log.LASTEMAILCODE,log.PRINTID,");
sql.append("log.EMAILID,log.FLAG,customer.IDNO,customerinfo.SEX,customer.email,customer.mobile from 日志表 as log, 客户表 as customer, 客户详情表 as customerinfo where log.LASID = char(customer.CUSTOMERID)
and char(customer.CUSTOMERID)= char(customerinfo.CUSTOMERID)");
中 Where 条件 用到了 char() 函数,原来 DB2 中 where 条件中 引用函数会引起全表扫描,逻辑没有什么错,就是线程卡在这里。
修改: 分两部分 先将 顾客ID搜出来,再去搜日志
1.先将 顾客ID搜出来
select customer.CUSTOMERID from 客户表 as customer, 客户详情表 as customerinfo
where customer.CUSTOMERID= customerinfo.CUSTOMERID for read only with ur
2.再去搜日志
StringBuffer sql = new StringBuffer(); sql.append("select log.LOGID,log.LASID,customerinfo.REALNAME,customer.IDTYPE, char(date(log.OPERATEDATE))||' '||char(time(log.OPERATEDATE)),log.OPERATETYPE,");
sql.append("log.OPERATECODE,log.PRINTSTATE,log.FIRSTPRINTDATE,log.LASTPRINTDATE,log.LASTPRINTCODE,");
sql.append("log.EMAILSTATE,log.FIRSTEMAILDATE,log.LASTEMAILDATE,log.LASTEMAILCODE,log.PRINTID,");
sql.append("log.EMAILID,log.FLAG,customer.IDNO,customerinfo.SEX,customer.email,customer.mobile from 日志表 as log, 客户表 as customer,客户详情表 as customerinfo where log.LASID in (");
for(Object CustomerId : CustomerIds){sql.append("'"+CustomerId.toString()+"',");
}
sql.deleteCharAt(sql.lastIndexOf(","));
sql.append(") AND for read only with ur");
记得加上 " for
read only with ur
"
转载于:https://my.oschina.net/u/2277088/blog/538782
DB2 char()函数引起全表扫描相关推荐
- oracle trim 性能,ORACLE sql调优之记录一次trim函数引发的大表全表扫描
2017年8月14日,一地市oracle相关的调度程序ETL抽取速度奇慢,sql语句每次执行平均时间要9秒左右,如果所示: 该调度过程涉及的sql语句如下: select count(*) from ...
- sql语句优化之一:尽量使用索引避免全表扫描
url:http://lzz7658823.iteye.com/?page=3 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量 ...
- 内存只有100G,要全表扫描一个200G大表,会不会把内存用完?
主机内存只有100G,现在要全表扫描一个200G大表,会不会把DB主机的内存用光? 逻辑备份时,可不就是做整库扫描吗?若这样就会把内存吃光,逻辑备份不是早就挂了? 所以大表全表扫描,看起来应该没问题. ...
- oracle sql 分区查询语句_oracle11g 表分区后的查询语句如何知道是否进行了全表扫描...
2019-05-10 回答 1. 对返回的行无任何限定条件,即没有where 子句 2. 未对数据表与任何索引主列相对应的行限定条件 例如:在city-state-zip列创建了三列复合索引,那么仅对 ...
- mysql没加引号导致全表扫描_mysql隐蔽的索引规则导致数据全表扫描
索引是为了加速数据的检索,但是不合理的表结构或适应不当则会起到反作用.我们在项目中就遇到过类似的问题,两个十万级别的数据表,在做连接查询的时候,查询时间达到了7000多秒还没有查出结果. 首先说明,关 ...
- MYSQL避免全表扫描__如何查看sql查询是否用到索引(mysql)
MYSQL避免全表扫描 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 2.应尽量避免在 where 子句中对字段进行 null 值判断,否 ...
- 优化一个奇葩表设计上的全表扫描SQL
之前在一个比较繁忙的系统抓到的耗时长.消耗CPU多的一条SQL,如下: SELECT * FROM Z_VISU_DATA_ALARM_LOG T WHERE TO_DATE(T.T_TIMESTR, ...
- 记录一次没有收集直方图优化器选择全表扫描导致CPU耗尽
场景:数据库升级第二天,操作系统CPU使用率接近100%. 查看ash报告: 再看TOP SQL 具体SQL: select count(1) as chipinCount, sum(bets) as ...
- oracle查询不走索引全表扫描,使用索引快速全扫描(Index FFS)避免全表扫描的若干场景-Oracle...
使用索引快速全扫描(Index FFS)避免全表扫描的若干场景 什么使用使用Index FFS比FTS好? Oracle 8的Concept手册中介绍: 1. 索引必须包含所有查询中参考到的列. 2. ...
最新文章
- C#程序调用外部程序
- 地理信息技术加持 用数字孪生让城市更“聪明”
- 实验一:JDK下载与安装、Eclipse下载与使用总结心得
- HDFS源码分析心跳汇报之数据结构初始化
- android dialog横屏,解决dialog在横竖屏切换时消失
- python3随笔-特征值,特征向量,逆矩阵
- Where is number of opportunities not displayed message poped up
- Android实现分享代码,Android 分享功能的实现代码
- 人工智障学习笔记——深度学习(1)神经网络
- Hyper-v副本容量规划器
- 如何在 Linux 终端中复制粘贴 [初学者教程]
- WLT8016:模组通信调试
- ubuntu1804+CUDA10+cudnn7.4.2+TensorFlow2+Pytorch1.3 9700K+双路RTX 2080TI
- 航班延误来领钱,信用卡航班延误险最全攻略(2018年版)
- 程序员之死——致所有重压下的你
- 获取汉字的五笔,全拼和双拼的工具类
- 所谓的进步和提升,就是完成认知升级
- 移动硬盘 无法访问 解决方法
- 考研经验贴(南京航空航天大学,电子信息专硕)
- JS中操作字符串的常用方法
热门文章
- 21天Jmeter打卡Day21生成HTML测试报告
- 一个简单的重命名,在git中也有这么多学问
- PAT甲级1009 多项式相乘
- 存储过程返回结果集_PostgreSQL函数返回结果集
- linux nfs 多个ip,linux基础之NFS
- 基于DeepLabV3+与U-Net融合的黄瓜叶片病害严重程度分类方法
- 聊一聊Kaggle比赛
- java 1.7 环境变量_安装JDK1.8之后又安装1.7出现的环境变量问题
- 一种新的排序算法,基于优先队列
- php无法创建cookie,php cookie无法正常工作