问题源自一个sql代码
select count(1) "rwsl", count(decode(xx.FPSJ,null,null,1)) "fpsl", count(decode(xx.HSSJ,null,null,1)) "fksl", count(decode(mx.NEXT_CLHJ,'HSJGCH',1,null)) "hsjgch", count(decode(mx.NEXT_CLHJ,'HSJGFH',1,null)) "hsjgfh", count(decode(mx.NEXT_CLHJ,'FKJGCH',1,null)) "fkjgch", count(decode(mx.NEXT_CLHJ,'FKJGFH',1,null)) "fkjgfh", count(decode(mx.NEXT_CLHJ,'FKJGQR',1,null)) "fkjgqr", count(decode(mx.NEXT_CLHJ||'!'||mx.LAST_CLZT_DM,'FKJGSP!YQRFKJG',1,null)) "fkjgsp", count(decode(mx.xfzt||'!'||mx.LAST_CLZT_DM,'YXF!QRBJS',1, 'YXF!RWJS',1,'YXF!ECHS',1,null)) "fkspjs", count(decode(mx.LAST_CLZT_DM,'QRBJS',1,null)) "qrbjs", count(decode(mx.xfzt||'!'||mx.LAST_CLZT_DM,'YXF!RWJS',1,null)) "rwjs", count(decode(mx.LAST_CLZT_DM,'ECHS',1,null)) "thhs" from FXYD_YDMX mx,fxyd_rwpc pc,fxyd_clxx xx,dim_swjg swjg where mx.ydjg_dm = swjg.swjg_dm and swjg.SWJG_DSSWJG_DM = '23403000000' and mx.tzs_bh = pc.tzs_bh and mx.fxmx_bh = xx.fxmx_bh(+) and pc.TJBZ = 'Y' --注意下面就是慢的罪魁祸首 and ((select count(1) from FXYD_RWHDJL h where h.clhj='FKJGSP' and h.zt_clh = 'ECHS' and h.fxmx_bh = mx.fxmx_bh) >= 0)
由于where条件后面加了一个子查询 还用到了 聚合函数count 以及数据的比较
导致了oracle将执行计划 强制走了 主表的全表扫描 从而导致执行时间查过了40秒
解决方案是 改成
--用历史表先处理好数据 在跟主表去关联过滤 with hdtemp as (select h.fxmx_bh from FXYD_RWHDJL h group by h.fxmx_bh having(count(decode(h.clhj||'#'||h.zt_clh,'FKJGSP#ECHS',1,null)))>=0) select count(1) "rwsl", count(decode(xx.FPSJ,null,null,1)) "fpsl", count(decode(xx.HSSJ,null,null,1)) "fksl", count(decode(mx.NEXT_CLHJ,'HSJGCH',1,null)) "hsjgch", count(decode(mx.NEXT_CLHJ,'HSJGFH',1,null)) "hsjgfh", count(decode(mx.NEXT_CLHJ,'FKJGCH',1,null)) "fkjgch", count(decode(mx.NEXT_CLHJ,'FKJGFH',1,null)) "fkjgfh", count(decode(mx.NEXT_CLHJ,'FKJGQR',1,null)) "fkjgqr", count(decode(mx.NEXT_CLHJ||'!'||mx.LAST_CLZT_DM,'FKJGSP!YQRFKJG',1,null)) "fkjgsp", count(decode(mx.xfzt||'!'||mx.LAST_CLZT_DM,'YXF!QRBJS',1, 'YXF!RWJS',1,'YXF!ECHS',1,null)) "fkspjs", count(decode(mx.LAST_CLZT_DM,'QRBJS',1,null)) "qrbjs", count(decode(mx.xfzt||'!'||mx.LAST_CLZT_DM,'YXF!RWJS',1,null)) "rwjs", count(decode(mx.LAST_CLZT_DM,'ECHS',1,null)) "thhs" from FXYD_YDMX mx,fxyd_rwpc pc,fxyd_clxx xx,dim_swjg swjg,hdtemp where mx.ydjg_dm = swjg.swjg_dm and swjg.SWJG_DSSWJG_DM = '23403000000' and hdtemp.FXMX_BH = mx.fxmx_bh and mx.tzs_bh = pc.tzs_bh and mx.fxmx_bh = xx.fxmx_bh(+) and pc.TJBZ = 'Y'
相关推荐
SQL 的WHERE条件解析器,在做列表控件时开发。 能够将常用的WHERE条件解析成一个条件树。 可以对条件树进行相关操作后再还源成SQL语句。
浅析SQL中WHERE EXISTS子查询.pdf
where 条件查询.sql
SQL中on条件与where条件的区别基础知识
计算机后端-PHP视频教程. php与mysql加强- 07. php加强19-where型子查询.wmv
今天看到一篇关于MySQL的IN子查询优化的案例, 一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试。) 随后动手按照他说的做了一个表来测试验证,发现MySQL的IN子...
C# List多条件查询聚合查询,List条件查询Where与GroupBy聚合查询
php 表达式where查询
java调用shell命令,在shell命令中调用DataX任务并传递参数。 坑主要在DataX传递参数涉及到特殊字符应该如何处理这块,有时间可以自己试; 没时间可以用我的经验,自己选择;
2.2、按条件查询 (1) 比较运算符 > , ,= , != (),>= , [sql] view plain copy select * from STUDENT where STU_AGE>13; in(v1,v2..vn) ,符合v1,v2,,,vn才能被查出 IN关键字可以判断某个字段的值是否在...
数据库子查询资料, 1、基本集合的查询测试 Where 表达式 [not] in (子查询) 2、基本比较查询测试 Where 表达式 比较运算符 (子查询) 比较运算符(=、、<、>、、)
主要介绍了Thinkphp使用mongodb数据库实现多条件查询方法,修改了mongodb驱动文件来实现复合查询、多条件查询,需要的朋友可以参考下
简单数据库但表查询 select * from kjbdsjk where 姓名 = 王勇 and 分数 = 87...7.在UPDATE语句中应用子查询:update kjbdsjk set 工资 = 工资+1000 where 工资 in (select 工资 from kjbdsjk where 工资 > "+stredit+")
5.4 使用WHERE子句定义搜索条件查询 5.4.1 WHERE子句单条件查询 5.4.2 单值比较运算符 5.4.3 BETWEEN运算符范围筛选 5.4.4 NULL值的判断 第6章 复杂搜索条件查询 6.1 本章用到的实例表 6.2 组合查询...
winform下实现的一个动态无限级的自定义添加SQLwhere条件的控件,显示外观是树状列表,只要你给这控件设置好哪几个字段可以用来拼where,那么运行起来后你可以动态的无限级的添加子and/or等等条件拼接,可以支持生成...
多条件查询列表,快捷,简单易懂,粘贴复制即可使用,使用于各种场景
2.体会各种查询的异同及相互之间的转换,体会各种查询的执行过程,为综合应用打下良好的基础。 ● 查询没有选修指定课程号的学生的学号、姓名、性别、出生日期和级别。课程号由局部变量提供。 declare @Cno char...
掌握子查询可以解决的问题; 了解子查询的分类; 掌握单行子查询、多行子查询、多列子查询; 掌握在WHERE、HAVING、FROM子句中编写子查询; 理解子查询返回空值对主查询所产生的影响; 掌握T0P-N及分页查询;
Yii Framework 2.0 Where条件拼接 pdf 应该囊括 了大部分的查询示例,like ,not,...
本文实例讲述了oracle基本查询操作子查询用法。分享给大家供大家参考,具体如下: ...(*注意:子查询要包含在括号内,将子查询放在比较条件的右侧。单行操作符对应单行子查询,多行操作符对应多行子