not in 和 not exists
时间:2011-12-03
来源:互联网
t4.LINENAME,
t4.busclass,
t4.DRIVERACODE,
t4.DRIVERANAME,
t4.FIRSTTIME,
to_char('') as DRIVERBCODE,
to_char('') as DRIVERBNAME,
to_date('', 'YYYY-MM-DD HH24:MI:SS') as CHANGETIME
from PI_BUSINFO t1
left join v_pi_dispatchplan_ccy t4
on t1.BUSSELFNO = t4.busselfno
where t1.AREAOWNER = 0
and t1.busstatus <> 0
and sysdate > t4.FIRSTTIME
and t4.busselfno not in (select t6.busselfno
from v_pi_posinout_ccy t6
where trunc(t6.entertime) = trunc(sysdate)
union all
select t7.busid
from pi_inout t7
where trunc(t7.entertime) = trunc(sysdate))
not in 的效率太慢的
而上面的sql语句 not in 换成not exists 为什么执行不了报错 ORA-00920: invalid relational operator
t4.busselfno 的字段类型是varchar2(20),t6.busselfno 的字段类型是varchar2(20),t7.busid 字段类型是varchar2(10),
不过我将 union all 后面的comment了也执行不了。
还有个问题我将蓝色代码部分换成
(select t6.busselfno
from v_pi_posinout_ccy t6
where t6.entertime between
to_date(to_char(sysdate, 'yyyy-mm-dd') || ' ' || '00:00:00',
'yyyy-mm-dd hh24:mi:ss') and
to_date(to_char(sysdate, 'yyyy-mm-dd') || ' ' || '23:59:59',
'yyyy-mm-dd hh24:mi:ss')
union all
select t7.busid from pi_inout t7 where t7.entertime between
to_date(to_char(sysdate, 'yyyy-mm-dd') || ' ' || '00:00:00',
'yyyy-mm-dd hh24:mi:ss') and
to_date(to_char(sysdate, 'yyyy-mm-dd') || ' ' || '23:59:59',
'yyyy-mm-dd hh24:mi:ss'))执行的速度快了11秒,这是为什么
作者: chengccy2010 发布时间: 2011-12-03
select t4.busselfno,
t4.LINENAME,
t4.busclass,
t4.DRIVERACODE,
t4.DRIVERANAME,
t4.FIRSTTIME,
to_char('') as DRIVERBCODE,
to_char('') as DRIVERBNAME,
to_date('', 'YYYY-MM-DD HH24:MI:SS') as CHANGETIME
from PI_BUSINFO t1
left join v_pi_dispatchplan_ccy t4
on t1.BUSSELFNO = t4.busselfno
where t1.AREAOWNER = 0
and t1.busstatus <> 0
and sysdate > t4.FIRSTTIME
这个SQL语句返回的结果比较少的不会超过100条
蓝色部分的SQL语句返回的结果有1000条左右。
想问下怎么提高这个SQL语句的速度,索引我也用了,并不明显
作者: chengccy2010 发布时间: 2011-12-03
你的t7.entertime 和 t6.entertime 上面肯定有索引。
你得第一种写法在 这个字段上加了一个 trunc 函数,导致索引失效了,而第二个没有导致索引失效,原因就是这么简单。
2、再回答你的第一个问题,not in 和 not exists 不能等价的替换的,有一点点小区别,not exists 里面需要跟主表有关联关系的,根据你写的sql,我给你改一下。
SQL code
SELECT T4.BUSSELFNO, T4.LINENAME, T4.BUSCLASS, T4.DRIVERACODE, T4.DRIVERANAME, T4.FIRSTTIME, TO_CHAR('') AS DRIVERBCODE, TO_CHAR('') AS DRIVERBNAME, TO_DATE('', 'YYYY-MM-DD HH24:MI:SS') AS CHANGETIME FROM PI_BUSINFO T1 LEFT JOIN V_PI_DISPATCHPLAN_CCY T4 ON T1.BUSSELFNO = T4.BUSSELFNO WHERE T1.AREAOWNER = 0 AND T1.BUSSTATUS <> 0 AND SYSDATE > T4.FIRSTTIME --AND T4.BUSSELFNO NOT IN AND NOT EXISTS (SELECT T6.BUSSELFNO FROM V_PI_POSINOUT_CCY T6 WHERE T6.ENTERTIME BETWEEN TO_DATE(TO_CHAR(SYSDATE, 'yyyy-mm-dd') || ' ' || '00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND TO_DATE(TO_CHAR(SYSDATE, 'yyyy-mm-dd') || ' ' || '23:59:59', 'yyyy-mm-dd hh24:mi:ss') AND T6.BUSSELFNO = T4.BUSSELFNO UNION ALL SELECT T7.BUSID FROM PI_INOUT T7 WHERE T7.ENTERTIME BETWEEN TO_DATE(TO_CHAR(SYSDATE, 'yyyy-mm-dd') || ' ' || '00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND TO_DATE(TO_CHAR(SYSDATE, 'yyyy-mm-dd') || ' ' || '23:59:59', 'yyyy-mm-dd hh24:mi:ss') AND T7.BUSSELFNO = T4.BUSSELFNO);
作者: BenChiM888 发布时间: 2011-12-03
另外:V_PI_POSINOUT_CCY 如果是个视图的话,建议先把数据查出来放到临时表中,建立索引再查询临时表的数据。
1、先回答你得第二个问题
你的t7.entertime 和 t6.entertime 上面肯定有索引。
你得第一种写法在 这个字段上加了一个 trunc 函数,导致索引失效了,而第二个没有导致索引失效,原因就是这么简单。
2、再回答你的第一个问题,not in 和 not exists 不能等价的替换的,有一点点小区别,not exists 里面需要跟主表有关联关系的,根据你写的sql,……
作者: BenChiM888 发布时间: 2011-12-03
1、先回答你得第二个问题
你的t7.entertime 和 t6.entertime 上面肯定有索引。
你得第一种写法在 这个字段上加了一个 trunc 函数,导致索引失效了,而第二个没有导致索引失效,原因就是这么简单。
2、再回答你的第一个问题,not in 和 not exists 不能等价的替换的,有一点点小区别,not exists 里面需要跟主表有关联关系的,根据你写的sql,……
谢谢了。
让我知道了trunc函数会让索引失效。
第一个问题是我疏忽了,在2楼我说到了,不过执行速度和not in 没什么区别。我想问问怎么提高这个执行速度
作者: chengccy2010 发布时间: 2011-12-03
作者: LuiseRADL 发布时间: 2011-12-03
引用 2 楼 benchim888 的回复:
1、先回答你得第二个问题
你的t7.entertime 和 t6.entertime 上面肯定有索引。
你得第一种写法在 这个字段上加了一个 trunc 函数,导致索引失效了,而第二个没有导致索引失效,原因就是这么简单。
2、再回答你的第一个问题,not in 和 not exists 不能等价的替换的,有一点点小区别,not exists……
作者: BenChiM888 发布时间: 2011-12-03
作者: BenChiM888 发布时间: 2011-12-03
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28