SqlServer中in和exists的区别效率问题

【SQL Server】探讨 IN 和 EXISTS之间的区别 在使用 SQL 查询相关表数据时,通常需要根据另一个表中的值来筛选数据。而 IN 与 EXISTS 子句都是用于此场景的常用方式,但使用时两者存在工作方式不同。它们使用上的选择会显著影响查询的性能,尤其是在大型数据集中。本文我们一起探讨 IN 和 EXISTS 之间的区别、使用与注意事项。 阅读详情

in 和exists
in是把外表和内表作hash 连接,而exists 是对外表作loop 循环,每次loop 循环再对内表进行查询。

一直以来认为exists 比in 效率高的说法是不准确的。如果查询的两个表大小相当,那么用in 和exists 差别不大。

如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:

例如:

表A(小表),表B(大表)1:

select * from A where cc in (select cc from B)

 效率低,用到了A 表上cc 列的索引;


select * from A where exists(select cc from B where cc=A.cc)
 
效率高,用到了B 表上cc 列的索引。

相反的2:

select * from B where cc in (select cc from A)
 
效率高,用到了B 表上cc 列的索引;

select * from B where exists(select cc from A where cc=B.cc)
 
效率低,用到了A 表上cc 列的索引。


not in 和not exists
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;


而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists 都比not in 要快。

SQL SERVER中关于exists 和 in的简单分析 主要介绍了SQL SERVER中关于exists 和 in的简单分析,需要的朋友可以参考下 立即下载

相关推荐

k-Wave仿真例程:创建超声换能器并绘制声场分布

k-Wave软件是为了模拟超声波在1D、2D或3D中的传播。应用示例包括:- 均匀和非均匀介质中的传播- 模拟各种类型的传感器- 模拟多普勒效应- 衍射、折射和反射- 光声、超声成像- 波束合成、成像重建- 模拟弹性波。

weixin_38452364的博客 6325

SQL server的Exist与in区别

Exists:将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则EXISTS子句返回TRUE,这一行行可作为外查询的结果行,否则不能作为结果。 区别: IN表是外边和内表进行hash连接,是先执行子查询。EXISTS是对外表进行循环,然后在内表进行查询。 适用范围:当查询字段进行了索引时,主表 A 大于从表 B,使用 IN 子查询效率更高,相...

weixin_30693183的博客 642

Centos7.9上安装glibc2.28遇到/usr/bin/ld: cannot find -lnss_test2问题

Centos7.9安装glic2.28遇到-lnss_test2问题及解决方案。

freflying1119的博客 2898

数据库:SQLServer中in和 exists函数用法笔记

今天给大家分享一下SQLServer中in和 exists 用法,希望能对大家有所帮助。一、IN 用法确定指定的值是否与子查询或列表中的数据相匹配。1.1 语法格式test_expres...

IT技术分享社区 5436

C# 操作Excel的时候,出现"被呼叫方拒绝接受呼叫的异常"的解决方案(参考官方给出的解决方案)

首先官方有对这个错误给出解释和解决方案,连接如下: https://docs.microsoft.com/zh-cn/previous-versions/ms228772(v=vs.120)#%E5%8F%AF%E9%9D%A0%E7%BC%96%E7%A8%8B 简单来说,貌似是线程问题,我猜。。。 之前我尝试着在代码中添加 Thread.Sleep(1000); 来进行解决,这种办...

Ck_Max的博客 5767

ms17-010 永恒之蓝漏洞利用+抓包分析过程

一、实验环境: 1、攻击机:Kali 1)攻击工具:msf 2)分析工具:wireshark 3)IP地址:192.168.204.157(自动获得) 2、靶 机:Windows7 1)版本:SP1 2)开启网络共享(SMB协议) 3)关闭防火墙 4)IP地址:192.168.204.150(自动获得) 3、网卡连接方式:Vmnet8(NAT) 二、实验步骤: ...

qq_41976183的博客 6947

SQL Server中的EXISTS语法

浅显易懂聊聊SQL中的EXISTS

xms_123456的博客 3323

从0到1打造一台机器人走起来

1)本体机械结构设计,依据人体生物学和生物力学知识,结合机器人运动时各关节扭矩需求,进行合理选用电机,比如胯部需要大扭矩,腿部惯量小等2)硬件拓扑上,分层架构的信号层和功率协同工作,高带宽,低延时,硬实时3)步态规划设计与验证环节实机回溯和部署过程:Real2Sim,Sim2Sim,Sim2Real。

weixin_43163941的博客 243

SQL Server EXISTS 和 IN 的使用方法、特性及查询效率比较

在 SQL Server 中,EXISTS和IN是两个常用的子查询操作符,用于检查某个值是否存在于一个子查询的结果集中。尽管它们在功能上有相似之处,但在使用方法、特性、查询效率和生成查询计划方面存在一些重要的区别。本文将详细探讨这两个操作符的使用方法、特性、查询效率以及生成查询计划的区别。

梓芮 1732

深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总

本文简要介绍深度学习的前向传播与反向传播,以及前馈神经网络与反馈神经网络。

haopinglianlian的博客 3042

泰凌微8258入门教程 基础篇①——Bluetooth® SIG Mesh 快速上手

Bluetooth® SIG Mesh Quick Start

6729

sqlserver in 和Exists 用法

例子如下(即exists返回where后2个比较的where子句中相同值,not exists则返回where子句中不同值): exists (sql 返回结果集为真) not exists (sql 不返回结果集为真)   如下:表A ID  NAME 1  A1 2  A2 3  A3 表BID AID NAME1  1   B12  ...

wyf 2933

机器人中的数值优化(十二)——带约束优化问题简介、LP线性规划

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 3850

Sql语句中IN和exists的区别及应用

  表展示    首先,查询中涉及到的两个表,一个user和一个order表,具体表的内容如下:    user表:        order表:       in    确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快。    具体sql语句如下: 1 SELECT ...

ywl470812087的博客 11万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SQLSERVER数据集合的交、并、差集和四种连接,In,Not In,Exist,Not Exist的区别和联系

SQLServer 交、并、差集合运算 SQLServer中通过intersect,union,except和三个关键字对应交、并、差三种集合运算。 他们的对应关系可以参考下面图示 前提条件: 两个查询的结果集的规则: 两个查询中列的数量和顺序必须相同。相应列的数据类型必须相同或兼容。列名可以不一样。 1 Union 取合集并过滤重复数据 SELECT * FROM A UNION SELECT * FROM B; 2 Union all 取合集不过滤重复数据 SELECT * FROM A UNION

weixin_46879188的博客 3578

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

in和exists区别

如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。 exists 与 in 最大的区别在于 in引导的子句只能返回一个字段; exists : 强调的是是否返回结果集,不要求知道返回什么; 多字段in、not in在db2数据中可以执行,SQL Server不行...

cjj476017086的博客 569

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SQL中如何使用EXISTS替代IN

转载,原文地址:http://www.cnblogs.com/V1haoge/p/6385312.html 我们在程序中一般在做SQL优化的时候讲究使用EXISTS带替代IN的做法,理由是EXISTS执行效率要比IN高。   之前我一直挺懵懂的一件事情是如何使用EXISTS来替换IN呢,二者表示的意义又是什么呢?今天就我个人理解记录一下   IN表示范围,指某一字段在某一范围之内,这个范围一般使用子查询来获取,由此可知IN子查询返回的结果应该就是这个范围集。   EXISTS表示存在,指至少存在一处,这个条

weixin_45439637的博客 1335

SQL中的in与not in、exists与not exists的区别以及性能分析

SQL优化必备知识点,in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的。

软件开发实战项目分享 627

数据库中in exists的主要作用和区别

in,exists其实是两个功能差不多的sql命令,如果查询的两个表大小相当,用in和exists差别不大。 in查询相当于多个or条件的叠加,这个相信大空都比较容易理解exists则主要用于主表的结果集小,也就是外层循环少的情况,而in是用于子查询的结果集少的情况。exists查询时对主表(外表)用loop逐条循环查询,每次查询都会判断exists的条件语句,当 exists里的条件语句能够返回记录行时(注:无论记录行是多少,只要能返回),条件就为真,则外循环LOOP返回当前loop到的这条记录,反之如

wh445306 6305

SQL中EXISTS的用法

一、引言 select a.pid,a.pname FROM person a where exists( select b.oid FROM Orders b where b.oid = a.pid) 此时 EXISTS 是如何执行的呢?子查询返回的是 oid 字段,而外面的查询要找的是 pid 和 pame 字段,这两个字段肯定不在 oid 里面啊,这是如何匹配的呢? EXISTS 用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值 true/false。EXISTS

ChineseSoftware的博客 2804

mysql not exists 效率高_mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录

mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录,需要的朋友可以参考下。NOT IN、JOIN、IS NULL、NOT EXISTS效率对比语句一:select count(*) from A where A.a not in (select a from B)语句二:select count(*) from A left join B on A.a...

weixin_35917998的博客 716

SQL查询中in、exists、not in、not exists的用法与区别

1、in和exists in是把外表和内表作hash(字典集合)连接,而exists是对外表作循环,每次循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的,如果查询的两个表大小相当,那么用in和exists差别不大;如果两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in。 例如:表A(小表),表B(大表) 方式一:索引使用 1)select * fr...

mhjava1314的博客 510

sql not exists

简单的理解就是 not exists = not in;exists= in 但这只是简单的理解而已,其里面的执行机制和细微处还是有一定的差别! 以下是从网络上摘录下的文章: SQL里的EXISTS与in、not exists与not in 效率比较和使用在 MSSQL 中,插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经

汪涛的专栏 590
上一篇: C#后端代码请求webapi接口炒鸡简便实用写法
下一篇: SQL使用OFFSET/FETCH NEXT实现分页对比ROW_NUMBER,性能差异
vimanas
博客等级 码龄11年 25粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值