in 与Exits的区别
来源:互联网 发布:php echo 输出数组 编辑:程序博客网 时间:2024/06/08 16:10
1.比较和扫描方法不一样,一般IN慢,要全表扫描,不能使用索引.并且当子查询与IN或NOT IN连用时,子查询返回一个或多个结果值,当子查询与EXISTS或NOT EXISTS连用时,
检查是否有符合子查询条件的结果,返回值为TRUE或FALSE。
我作了一个存储过程,里面一段原先是这样的:
SELECT * FROM TABLENAME
WHERE DELETE_FLAG IN ('R','U','D')
AND LEG_ID NOT IN
(SELECT LEG_ID
FROM T_CURRENTFLTLEG);
由于这个表大,记录数大约上万,结果用去我15秒时间。
后来,改成这样:
SELECT * FROM TABLENAME M
WHERE DELETE_FLAG IN ('R','U','D')
AND NOT EXISTS (SELECT LEG_ID FROM
T_CURRENTFLTLEG T
WHERE T.LEG_ID = M.LEG_ID);
竟然只要0.15秒。
2.IN
确定给定的值是否与子查询或列表中的值相匹配。
EXISTS
指定一个子查询,检测行的存在。
下面从具体的语句来看:
select * from 表A where exists(select * from 表B where 表B.id=表A.id)
这句相当于
select * from 表A where id in (select id from 表B)
对于表A的每一条数据,都执行select * from 表B where 表B.id=表A.id的存在性判断,如果表B中存在表A当前
行相同的id,则exists为真,该行显示,否则不显示
3. exists主要用于片面的,有满足一个条件的即可,
in 主要用于具体的集合操作, 有多少满足条件.
确定给定的值是否与子查询或列表中的值相匹配。
EXISTS
指定一个子查询,检测行的存在。
下面从具体的语句来看:
select * from 表A where exists(select * from 表B where 表B.id=表A.id)
这句相当于
select * from 表A where id in (select id from 表B)
对于表A的每一条数据,都执行select * from 表B where 表B.id=表A.id的存在性判断,如果表B中存在表A当前
行相同的id,则exists为真,该行显示,否则不显示
3. exists主要用于片面的,有满足一个条件的即可,
in 主要用于具体的集合操作, 有多少满足条件.
- in 与Exits的区别
- in 和exits 的区别
- exits和in的区别
- not in 和 not exits 的区别
- sql中exits和in的区别
- in exits区别
- exits和In的区别(http://hi.baidu.com/delphi_relive/blog/item/d7c0034a49c4932208f7ef21.html)
- ORACLE:exits和in的性能对比
- oracle exits和in的简单介绍
- sql笔试题(in和exits区别)
- Exits和In
- Oracle中的in和exits的使用比较
- SQL优化-IN和EXITS
- exist 与 in 的区别
- exist与in 的区别
- EXISTS与IN的区别
- In与Exist的区别
- EXISTS与In的区别
- DataFlow-支持Greenplum、Oracle等数据库的ETL工具(1)--概述
- Win7 使用技巧
- 持续集成工具Team City一些应用
- wpf下实现图片的放大缩小和平移
- 1.jstl之SQL:setDataSource
- in 与Exits的区别
- 类目,延展,协议
- usaco Subset Sums
- IOS开发UI篇之──自定义加载等待框(MBProgressHUD)
- easyUI 拖动(Drag)和放置(Drop)Tree
- KD树核心思想简介
- The flag analysis of struct termios
- css的四种调用方式
- HDU 2519 新生晚会