首页 新闻 会员 周边

oracle的sql优化问题

0
悬赏园豆:10 [已解决问题] 解决于 2019-03-09 17:15

原sql:

select M.* from (
SELECT T.*
FROM (SELECT b.b1,
c.c1
FROM BTable b
LEFT JOIN ATable a
ON b.ID = a.BID
INNER JOIN CTable c
ON b.c2 = c.c2
WHERE (b.INS_STATUS = 26 AND
a.PA_STATUS = 1 OR
b.INS_STATUS IN
(24, 13))
AND (b.OPE_DATE > a.OPE_DATE OR
a.a.OPE_DATE IS NULL OR
a.RM_STATUS = 0)
AND b.OPE_DATE >= SYSDATE - 60
ORDER BY T.OPERATE_DATE
) T

) M
where ROWNUM<10000

 

 

之后的sql:

select M.* from (
SELECT T.*
FROM (SELECT b.b1,
c.c1
FROM BTable b
LEFT JOIN ATable a
ON b.ID = a.BID
INNER JOIN CTable c
ON b.c2 = c.c2
WHERE (b.INS_STATUS = 26 AND
a.PA_STATUS = 1 OR
b.INS_STATUS IN
(24, 13))
AND (b.OPE_DATE > a.OPE_DATE OR
a.a.OPE_DATE IS NULL OR
a.RM_STATUS = 0)
AND b.OPE_DATE >= SYSDATE - 60
AND ROWNUM>=1
) T ORDER BY T.OPERATE_DATE

) M
where ROWNUM<10000

这两条sql不同的就是我在条件里加了一句AND ROWNUM>=1并把排序放到了第二层,这样做之后查询速度变快了,有两个问题:这两个sql是等效的吗?如果等效为什么查询速度会提升?

碗粥的主页 碗粥 | 初学一级 | 园豆:6
提问于:2018-03-16 14:44
< >
分享
最佳答案
0

这两个sql是等效的吗?

多测试几次就大概知道是不是等效的了

------------------------------

如果等效为什么查询速度会提升?

仔细看看查询计划,然后猜

收获园豆:10
西漠以西 | 小虾三级 |园豆:1675 | 2018-03-16 15:15
其他回答(1)
0

时间太久忘了怎么解决的了。

碗粥 | 园豆:6 (初学一级) | 2019-03-09 17:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册