文档章节

DB2 char()函数引起全表扫描

J
 JackMo2015
发布于 2015/12/03 12:19
字数 324
阅读 111
收藏 0

解决方法是情愿多几次访问数据库,增加 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 "


© 著作权归作者所有

共有 人打赏支持
J
粉丝 3
博文 132
码字总数 42416
作品 0
广州
高级程序员
私信 提问
IBM原厂资深专家:DB2优化器和成本模型分析

src="https://mmbiz.qlogo.cn/mmbiz/tibrg3AoIJTtkVh8u4bRkfIvjE5vpWNPjaS8nibudC4PvBdVmjtu5iaIXwzMl0gic2CuBKn5NicfHZuwzFvUSia59YDw/0?wxfmt=jpeg" data-ratio="0.5889328063241107" data......

刘俊
2015/11/19
0
0
mysql数据库优化(sql语句优化)

整理这篇文档也算是有感而发,起因就是染布生产进度大约5W多条数据,每次导出为excel表格的时候服务器上的cpu压力爆满,而项目的架构又从源头上限制了从硬件层面上优化,故本篇文章仅仅从sql...

机智的明
2018/08/06
0
0
SQL --优化小结

对查询进行优化 0.任何地方都不要使用 select from t_tble,要用具体的字段代替 号,尽量不要返回用不到的字段。 1.尽量避免全表扫描,即如下语句 select * from t_test 理论上不会存在如上业...

求是科技
2016/05/04
71
0
数据库SQL优化大总结之 百万级数据库优化方案

1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表...

51GT
2017/08/16
0
0
DB2权限与授权

DB2权限与授权 转载地址:http://blog.itpub.net/22661144/viewspace-1477189/ --权限相关的视图 db2 "select substr(tabname,1,30) as tabname from syscat.tables where tabschema='SYSCAT......

huazhixu123
2017/11/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
8
0
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
3
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
4
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
今天
3
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部