oracle where in优化,【求助】为什么在where过滤条件中使用in这样子查询后速度变的非常慢?!...
本帖最后由 yujian0902 于 2014-5-27 16:33 编辑
有次帮同事优化SQL,发现写的SQL使用in这种过滤方式,查询出来花了将近6分钟;而后我改成连接方式(join),不到一秒钟。为什么反差如此之大?!
原SQL:
SELECT *
FROM (SELECT ROWNUM RN, A.*
FROM (SELECT LV2.DSTC_ID AreaId,
(select b.name from area_info_center@srcdb b where b.regoinid = lv2.dstc_id and rownum = 1) AreaName,
LV2.TIME_ID Time,
LV2.SAMPLE_ALL,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.RSCP_ALL / LV2.SAMPLE_ALL),2) RSCP_AVG,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.GOODCOVER1 / LV2.SAMPLE_ALL),4) KEY1,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.GOODCOVER2 / LV2.SAMPLE_ALL),4) KEY2,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.GOODCOVER3 / LV2.SAMPLE_ALL),4) KEY3,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.GOODCOVER4 / LV2.SAMPLE_ALL),4) KEY4,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.GOODCOVER5 / LV2.SAMPLE_ALL),4) KEY5,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.LV1KEY1 / LV2.SAMPLE_ALL),4) KEY6,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.LV1KEY2 / LV2.SAMPLE_ALL),4) KEY7,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.LV1KEY3 / LV2.SAMPLE_ALL),4) KEY8,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.LV1KEY4 / LV2.SAMPLE_ALL),4) KEY9,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.LV1KEY5 / LV2.SAMPLE_ALL),4) KEY10,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.LV1KEY6 / LV2.SAMPLE_ALL),4) KEY11,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.LV1KEY7 / LV2.SAMPLE_ALL),4) KEY12,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.LV1KEY8 / LV2.SAMPLE_ALL),4) KEY13,
ROUND(DECODE(LV2.SAMPLE_ALL,0,0,LV2.LV1KEY9 / LV2.SAMPLE_ALL),4) KEY14
FROM (SELECT T.DSTC_ID,
T.TIME_ID,
SUM(CASE WHEN (T.ZONE_ID = 0 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) SAMPLE_ALL,
SUM(CASE WHEN (T.ZONE_ID = 0 AND T.IDT_ID = 10000039) THEN T.IDT_VAL ELSE 0 END) RSCP_ALL,
SUM(CASE WHEN (T.ZONE_ID = 1 AND T.IDT_ID = 10000040) THEN T.IDT_VAL ELSE 0 END) GOODCOVER1,
SUM(CASE WHEN (T.ZONE_ID = 2 AND T.IDT_ID = 10000040) THEN T.IDT_VAL ELSE 0 END) GOODCOVER2,
SUM(CASE WHEN (T.ZONE_ID = 3 AND T.IDT_ID = 10000040) THEN T.IDT_VAL ELSE 0 END) GOODCOVER3,
SUM(CASE WHEN (T.ZONE_ID = 4 AND T.IDT_ID = 10000040) THEN T.IDT_VAL ELSE 0 END) GOODCOVER4,
SUM(CASE WHEN (T.ZONE_ID = 5 AND T.IDT_ID = 10000040) THEN T.IDT_VAL ELSE 0 END) GOODCOVER5,
SUM(CASE WHEN (T.ZONE_ID = 1 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY1,
SUM(CASE WHEN (T.ZONE_ID = 2 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY2,
SUM(CASE WHEN (T.ZONE_ID = 3 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY3,
SUM(CASE WHEN (T.ZONE_ID = 4 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY4,
SUM(CASE WHEN (T.ZONE_ID = 5 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY5,
SUM(CASE WHEN (T.ZONE_ID = 6 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY6,
SUM(CASE WHEN (T.ZONE_ID = 7 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY7,
SUM(CASE WHEN (T.ZONE_ID = 8 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY8,
SUM(CASE WHEN (T.ZONE_ID = 9 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY9
FROM CTUNI_SYS.G_HOUR_DSTC_NET_VSN_ZONE T
WHERE 1 = 1
and t.time_type = 3
and t.time_id >= '2014-04'
and t.time_id <= '2014-05'
and t.hour_id = '0'
and (t.DSTC_ID = 1919 or
t.DSTC_ID in
(select b.regoinid
from area_info_center@srcdb b
where b.parentregoinid = 1919))
and t.vsn = '0'
and t.net_type = 5
GROUP BY T.DSTC_ID, T.TIME_ID) LV2
order by lv2.dstc_id asc, lv2.time_id desc) A
WHERE ROWNUM <= 10)
WHERE RN >= 1
WO8.jpg (39.88 KB, 下载次数: 11)
原SQL执行计划
2014-5-27 16:24 上传
优化SQL:
SELECT *
FROM (SELECT ROWNUM RN,A.*
FROM (SELECT LV2.DSTC_ID AreaId,
(select b.name from area_info_center@srcdb b where b.regoinid=lv2.dstc_id and rownum=1) AreaName,LV2.TIME_ID Time,
LV2.SAMPLE_ALL,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.RSCP_ALL / LV2.SAMPLE_ALL), 2) RSCP_AVG,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.GOODCOVER1 / LV2.SAMPLE_ALL), 4) KEY1,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.GOODCOVER2 / LV2.SAMPLE_ALL), 4) KEY2,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.GOODCOVER3 / LV2.SAMPLE_ALL), 4) KEY3,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.GOODCOVER4 / LV2.SAMPLE_ALL), 4) KEY4,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.GOODCOVER5 / LV2.SAMPLE_ALL), 4) KEY5,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.LV1KEY1 / LV2.SAMPLE_ALL), 4) KEY6,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.LV1KEY2 / LV2.SAMPLE_ALL), 4) KEY7,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.LV1KEY3 / LV2.SAMPLE_ALL), 4) KEY8,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.LV1KEY4 / LV2.SAMPLE_ALL), 4) KEY9,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.LV1KEY5 / LV2.SAMPLE_ALL), 4) KEY10,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.LV1KEY6 / LV2.SAMPLE_ALL), 4) KEY11,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.LV1KEY7 / LV2.SAMPLE_ALL), 4) KEY12,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.LV1KEY8 / LV2.SAMPLE_ALL), 4) KEY13,
ROUND(DECODE(LV2.SAMPLE_ALL, 0, 0, LV2.LV1KEY9 / LV2.SAMPLE_ALL), 4) KEY14
FROM (SELECT T.DSTC_ID,T.TIME_ID,
SUM(CASE WHEN (T.ZONE_ID = 0 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) SAMPLE_ALL,
SUM(CASE WHEN (T.ZONE_ID = 0 AND T.IDT_ID = 10000039) THEN T.IDT_VAL ELSE 0 END) RSCP_ALL,
SUM(CASE WHEN (T.ZONE_ID = 1 AND T.IDT_ID = 10000040) THEN T.IDT_VAL ELSE 0 END) GOODCOVER1,
SUM(CASE WHEN (T.ZONE_ID = 2 AND T.IDT_ID = 10000040) THEN T.IDT_VAL ELSE 0 END) GOODCOVER2,
SUM(CASE WHEN (T.ZONE_ID = 3 AND T.IDT_ID = 10000040) THEN T.IDT_VAL ELSE 0 END) GOODCOVER3,
SUM(CASE WHEN (T.ZONE_ID = 4 AND T.IDT_ID = 10000040) THEN T.IDT_VAL ELSE 0 END) GOODCOVER4,
SUM(CASE WHEN (T.ZONE_ID = 5 AND T.IDT_ID = 10000040) THEN T.IDT_VAL ELSE 0 END) GOODCOVER5,
SUM(CASE WHEN (T.ZONE_ID = 1 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY1,
SUM(CASE WHEN (T.ZONE_ID = 2 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY2,
SUM(CASE WHEN (T.ZONE_ID = 3 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY3,
SUM(CASE WHEN (T.ZONE_ID = 4 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY4,
SUM(CASE WHEN (T.ZONE_ID = 5 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY5,
SUM(CASE WHEN (T.ZONE_ID = 6 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY6,
SUM(CASE WHEN (T.ZONE_ID = 7 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY7,
SUM(CASE WHEN (T.ZONE_ID = 8 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY8,
SUM(CASE WHEN (T.ZONE_ID = 9 AND T.IDT_ID = 10000047) THEN T.IDT_VAL ELSE 0 END) LV1KEY9
FROM CTUNI_SYS.G_HOUR_DSTC_NET_VSN_ZONE T,
(select 1918 regoinid from dual
union
select b.regoinid from area_info_center@srcdb b where b.parentregoinid=1918) S
WHERE 1 = 1
and t.time_type=3 and t.time_id>='2014-04' and t.time_id<='2014-05' and t.hour_id = '0'
and t.DSTC_ID = s.regoinid
and t.vsn='0' and t.net_type=5
GROUP BY T.DSTC_ID,T.TIME_ID) LV2
order by lv2.dstc_id asc,lv2.time_id desc) A
WHERE ROWNUM<=10) WHERE RN>=1
AL7.jpg (49.07 KB, 下载次数: 8)
2014-5-27 16:29 上传
oracle where in优化,【求助】为什么在where过滤条件中使用in这样子查询后速度变的非常慢?!...相关推荐
- oracle中where条件后用in这样子查询后变慢
今日开发一个需求,其中由于需求变态,写了一个挺复杂的sql,在本地测试环境看不出问题,但到了生产就变得非常慢(由于表数据量比较大),把sql粘贴出来执行了一下大概要42秒. 我写的sql大概是这个样子 ...
- c语言中被调用函数只需在主调函数中声明,其他函数中不用声明,求助,函数在其他函数中使用时要先声明后调用,这个没声明就用了...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 如题,程序如下: #include #include //malloc,calloc,free,realloc头文件 #define LEN sizeof ...
- c语言定义函数后引用,求助,函数在其他函数中使用时要先声明后调用,这个没声明就用了...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 如题,程序如下: #include #include //malloc,calloc,free,realloc头文件 #define LEN sizeof ...
- ORACLE+SQL性能优化
1. 访问Table的方式 ORACLE 采用两种访问表中记录的方式: a. 全表扫描 全表扫描就是顺序地访问表中每条记录. ORACLE采用一次读入多个数据块(database block)的方 ...
- oracle中or会使索引,为何查询条件中多了 OR 选项,索引就走全扫描?
ORACLE 11204, SOLARIS 如下:原始写法,where 条件中,有 OR 条件,这时,索引 IDX_BD_LOTMASTER_NO 走全索引扫描,导致效率非常低, -bash-3.2$ ...
- java criteria限制条数_java架构—Oracle SQL性能优化
(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先 ...
- Oracle数据库管理----性能优化
https://blog.csdn.net/yzllz001/article/details/54848513 数据库访问优化法则 要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我 ...
- oracle SQL性能优化
我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享! (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器 ...
- 高级SQL优化(二) ——《12年资深DBA教你Oracle开发与优化——性能优化部分》
目录: Oracle数据完整性和锁机制 索引及优化之表分析 表分析.约束及表间关系 Oracle体系结构1 Oracle体系结构2 海量数据库及分区1 海量数据库及分区2 海量数据库及分区 ...
最新文章
- 【spring boot】【spring cloud】异常:找不到方法HikariDataSource.getMetricsTrackerFactory()
- mysql存储过程——procedure[prəˈsiːdʒər]
- 0003-Longest Substring Without Repeating Characters(无重复字符的最长子串)
- html overflow 样式,css样式之overflow-x属性样式
- python神经网络实例_Python编程实现的简单神经网络算法示例
- 实用常识 | 一篇文章记录如何轻松清理C盘,C盘又满了,继续盘它
- WenLan-10亿参数!别只玩GPT,来看看人大中科院联手打造第一个大规模多模态中文预训练模型BriVL...
- 数据结构基础--线性表
- git如何将远程仓库代码,覆盖本地代码
- Handler机制原理图、源码、使用!!!!!
- 最简单的非线性动力系统
- Github上关于iOS的各种开源项目集合
- 苹果手机如何分享wifi密码_WiFi密码破解器 v5.1.3手机版
- 学弟学妹们,如果你想吃透 Java字节码的话,看这篇就好了!(超级硬核,建议收藏)
- beyong compare激活
- Android中如何实现多个框,android几种不同对话框的实现方式
- 【脑洞大开】神经网络vs非公理化推理系统(NARS)
- Debian搭建Samba服务
- 运行项目遇到:该网页无法正常运作,localhost将您重定向的次数过多时的解决方案
- QT实现ping功能