问题源自一个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'
相关推荐
pageHelper 分页失效解决方案 PageHelper 是一款优秀的 MyBatis 分页插件,它可以非常便利的使用,使开发效率得到很大的提升。但是,在使用 PageHelper 进行分页查询时,会出现一些问题,例如当进行一对多结果映射...
group_concat 函数在处理大量数据时效率较低,因为它会将所有结果集合并成一个字符串,对于大数据量的子部门查询,这种做法会导致内存消耗过大,进而影响查询速度。 解决方案: 1. 优化 MySQL 函数递归调用方案: ...
dblink_clob字段异常解决方案 在数据库.link连接远程数据库时,经常会遇到无法使用CLOB字段的问题,这是因为CLOB字段在远程数据库中的处理方式与本地数据库不同所导致的。下面将讨论解决dblink_clob字段异常的解决...
- 分解复杂查询为更简单的子查询或使用视图。 - 避免在WHERE子句中使用函数或表达式,这可能会阻止使用索引。 #### 11. 服务器配置不当 - **问题**:服务器硬件配置不合理,例如CPU数量、内存大小等不匹配。 - **...
尽管这个问题在Hibernate用户中并不罕见,但遗憾的是,相关的解决方案在论坛或文档中并不常见。 为了解决这个问题,我们需要寻找替代策略。一种可能的方法是创建视图,但这会增加数据库层面的复杂性。另一种方法是...
此外,还可以通过`EXISTS`或`NOT EXISTS`来检查子查询是否存在满足条件的记录。 为了进一步提高查询效率,可以考虑以下优化策略: 1. 使用索引:确保对参与比较和分组的列创建了索引,这将显著提高数据检索速度。 2...
- 如果需要频繁使用某一子查询的结果,考虑创建一个临时表来存储结果,而不是每次查询都重新计算。 #### 13. 索引优化 - 考虑索引类型和顺序,Clustered索引对查询和数据输入顺序有重大影响。如果查询模式和数据...
本篇将深入探讨如何在`UPDATE`语句中正确使用子查询,并提供相关的解决方案。 首先,我们要明白在`UPDATE`语句中直接使用子查询可能引发的问题。例如,当我们尝试像这样更新数据: ```sql UPDATE test.tb_vobile a...
但是,MySQL并不支持在`IN`、`ALL`、`ANY`或`SOME`子查询中直接使用`LIMIT`,导致了错误。 为了解决这个问题,开发者采取了另一种策略,即创建一个临时子查询来获取所需的`aid`值: ```sql WHERE mapply.aid IN ...
本文主要探讨了子查询与`IN`操作符在高并发场景下的性能差异,并提供了一个实际案例来说明如何通过调整查询结构来提升性能。以下是对相关知识点的详细说明: 1. **子查询与`IN`操作符**: `IN`操作符常用于在`...
为了避免这些问题,我们可以使用子查询和 ROWNUM 结合来实现 Top N 结果输出。例如: ```sql select * from ( select a.*, rownum as rn from ( select * from css_bl_view a where capture_phone_num = ...
4. **子查询的位置**:子查询通常出现在WHERE或HAVING子句中,但需注意,子查询必须包含在括号内,且一般应放在比较条件的右侧。 5. **子查询与组函数的结合**:子查询可以与MIN, MAX, SUM等组函数一起使用,如找出...
3. **使用JOIN代替子查询**:通过JOIN来合并多个表的数据,而不是使用子查询。 4. **拆分大型的DELETE或INSERT语句**:将大型的删除或插入操作拆分为多个较小的操作,以减少锁定时间和资源消耗。 5. **启用慢查询...
这种方法称为"子查询外提"或"计算前置",是数据库性能优化的常用手段之一。 此外,对于大量数据的处理,可以考虑使用索引、分区等技术来提升查询速度。在这个例子中,如果`ipdb`表的`start_ip`和`end_ip`字段已建立...
- 要注意性能优化,过多的表关联可能导致查询速度变慢,适时创建索引和调整查询结构有助于提高效率。 3. **子查询(Subquery)**: - 子查询是在一个更大的查询内部使用的查询,它可以作为一个独立的查询运行并...
3. **子查询与游标**:对于旧版本的SQL Server,可以通过子查询配合游标实现分页,但这通常效率较低,不推荐在大数据量场景下使用。 4. **物理分页与逻辑分页**:物理分页基于数据存储位置,而逻辑分页根据特定条件...
尽管这种方法可以工作,但它可能不是最优的解决方案,因为它会导致多次扫描表。对于性能优化,可以考虑使用其他方法,如使用`UNION ALL`或者通过在`WHERE`子句中直接组合多个条件。 然而,对于特定的场景,如数据量...
### K3数据库索引及系统性能优化解决方案(具体应用篇) #### 一、引言 在当前的大数据时代,数据库的性能直接影响到整个系统的运行效率和用户体验。对于企业级应用而言,如何通过合理的设计和优化手段提升数据库...
解决方案是在WHERE子句中涉及的列上创建合适的索引。 **案例2:减少全表扫描** 如果某个查询经常导致全表扫描,可以通过添加适当的过滤条件来减少扫描范围,或者创建适当的索引来加速查询。 **案例3:利用分区...
当涉及到大型数据表时,关联子查询可能导致显著的延迟。本文将深入探讨MySQL关联子查询的优化方法,通过实例来展示如何改进查询效率。 关联子查询,也称为嵌套查询,是将一个查询的结果作为另一个查询的条件。在...