in和exists

EXISTS 和 IN 区别 EXISTS用于判断子查询是否返回至少一行数据,一旦找到符合条件的行就停止查询,适用于检查数据是否存在的场景,尤其是在子查询数据量较大时表现较好。IN用于判断某个字段值是否在一个集合或子查询的结果集中,适用于小规模数据的匹配,且需要子查询返回具体的列值。在选择使用EXISTS还是IN时,应该根据数据的大小、查询的目的和性能需求来决定。 阅读详情

in和exists

exists和in的使用方式:

#对B查询涉及id,使用索引,故B表效率高,可用大表 -->外小内大

select * from A where exists (select * from B where A.id=B.id);

#对A查询涉及id,使用索引,故A表效率高,可用大表 -->外大内小

select * from A where A.id in (select id from B);

1、exists是对外表做loop循环,每次loop循环再对内表(子查询)进行查询,那么因为对内表的查询使用的索引(内表效率高,故可用大表),而外表有多大都需要遍历,不可避免(尽量用小表),故内表大的使用exists,可加快效率;

2、in是把外表和内表做hash连接,先查询内表,再把内表结果与外表匹配,对外表使用索引(外表效率高,可用大表),而内表多大都需要查询,不可避免,故外表大的使用in,可加快效率。

3、如果用not in ,则是内外表都全表扫描,无索引,效率低,可考虑使用not exists,也可使用A left join B on A.id=B.id where B.id is null 进行优化。

  此外,新近遇到的坑,mysql版本问题:

  MySQL版本问题:5.6.5优化了子查询,引入物化子查询(针对where clause的subquery),子查询物化将子查询结果存入临时表,确保子查询只执行一次,该表不记录重复数据且采用哈希索引查找;

而之前的版本则会把非相关子查询转化为相关子查询,导致效率低下(尤其是子查询是小表,外表是大表的情况下,效率变慢许多)。  

  相关子查询:子查询依赖外层连接的返回值;

  非相关子查询:子查询不依赖外层连接的返回值;

  子查询分两种,from语句(派生表)和where语句(子查询),派生表的效率要高一些,5.6的优化就是把where语句变成from语句。

  本来是内表小,用的in,但是据说5.6之前的版本会把非相关子查询改为相关子查询,就是把in的语句改成了exists的,结果效率超低。

  实验说明:派生表join比派生表的速度还要快。而使用in查询需要很多分钟还没有查出来。

#使用派生表 4.68秒
SELECT id FROM la WHERE cardid IN (
SELECT cardid FROM (
select cardid from la group by cardid having count(1)>50) a) ;
#使用派生表的内连接 1.26秒
SELECT id FROM la JOIN (
select cardid from la group by cardid having count(1)>50) a ON la.cardid=a.cardid;

 

posted @ 2019-04-24 13:29 toov5 阅读(...) 评论(...) 编辑 收藏

EXISTS用法及与IN的区别 阅读详情

相关推荐

Unity+ARFoundation 探坑之路

前两天想要上手Unity来AR方面的项目东东 ,探索过程中出现了各种各样的问题,现在将这个过程中遇到的各种各样问题梳理一下,希望后来者能开开心心上手Unity+AR。 注意:这是一篇踩坑博客,具体搭建还请自行百度。 一、ARFoundation or ARCore or ARKit Unity作为一个平台,不直接提供XR(包括VR、AR和MR)的开发包,这时就需要其他公司提供各种各样的SDK工具包...

qq_43575926的博客 7134

IN和EXISTS的区别和使用

SQL中IN和EXISTS用法的区别 结论 in()适合子表比主表数据小的情况 exists()适合子表比主表数据大的情况 当主表数据与子表数据一样大时,in与exists效率差不多,可任选一个使用. 使用IN的情况 select * from A where id in(select id from B) 以上查询A为主表,B为子表;使用了in语句,in()只执行一次,它查出B表中的所有id字段并缓存起来.之后,检查A表的id是否与B表中的id相等,如果相等则将A表的记录加入结果集中,直到遍

weixin_41979002的博客 3万+

Cadence DSP 算子开发实战:从入门到精通

本文详细介绍了Cadence DSP算子开发的实战技巧,从入门基础到高级优化。内容涵盖DSP架构特性、内存管理、分块计算策略、SIMD指令优化等核心知识,并提供了性能调优和调试的实用技巧,帮助开发者快速掌握Cadence DSP开发精髓,提升图像处理等计算密集型任务的开发效率。

weixin_29278805的博客 435

EXISTS和IN的区别

条件

weixin_70280523的博客 8511

2016域控服务器迁移,WIN Server2016 域服务器迁移出错

各位大神: 这几天刚安装了一台windows server 2016做域迁移时出现错误:1、默认SYSLOG、NETLOGON共享文件重启后自动取消共享,即使手动打开后依然会出现自动取消2、组策略中编辑策略时出现以下报错 policys.png (19.29 KB)2017-2-7 13:52操作此动作之前可以访问本机的共享(NETLOGON)3、使用DCDIAG检测多个报错:C:\Use...

weixin_31833039的博客 3314

【Qt串口调试助手】1.1 - Qt5编写串口调试助手,Qt串口编程

这章来学习串口数据流操作。仿照成品制作一个自己用Qt编写的串口助手。 1. 布局UI界面 创建QWidget工程,布局UI界面:拖入2个 Plain Text Edit,作为串口数据的接收显示和发送框。 拖入几个 Combo Box 、Label 和 Push Button,使用两个Widget进行布局。如下所示。 将接收区的 Plain Text Edit,属性勾选上 readOnly,使其运行时不会被人为的输入操作影响。 加入一些弹簧,使布局美观。(有必要可以加设置不能调整..

Mark_md的博客 9274

IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

SQL语句中exists和in的区别 转自https://www.cnblogs.com/emilyyoucan/p/7833769.html 表展示 查询中涉及到的两个表,一个user和一个order表,具体表的内容如下: user表: order表: in 一、确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快。 具体sql语句如下: SELECT * FROM

qq_40603010的博客 2210

【Autosar】学习总结-MCAL

一、简介 MCAL:微控制器抽象层;位于BSW层中的最下层; MCAL细分,可将驱动分为:微控制器驱动、存储器驱动、通信驱动、IO驱动: 二、MCAL的配置(EB-Tresos) 1.PORT 我理解的PORT:MCAL层中的IO驱动组中的pin脚总体配置: Port就是芯片上的每个pin脚,可以配置成DIO ADC PWM ICU等单引脚的功能,也能配置成CAN的TX或者RX、SPI的MOSI等等其他功能的单个pin脚功能; 总之,PORT就是芯片上的具体的某个引脚。 配置

zDavid_2018的博客 3万+

Sql语句中的in和exist

表展示     首先,查询中涉及到的两个表,一个user和一个order表,具体表的内容如下: user表 orer表 - in in在查询的时候,首先查询子查询的表,然后将内表和外表做一个[笛卡尔积](https://baike.baidu.com/item/%E7%AC%9B%E5%8D%A1%E5%B0%94%E4%B9%98%E7%A7%AF/6323173...

qq_33393542的博客 1000

【RH850/U2A】:HSM与APP通信(中断方式)

HSM与APP通信(中断方式)

1994

PC 端微信页面拆分及 JavaFx 使用

一、前言 对于一个知识点的学习过程来说,往往使用自己熟悉的工具或方式才更易于上手。因为所有同类型的知识点在抛出复杂的流程拨云见日后,所能得到的几乎都是同样的设计思想和实现理论。 在 Java 语言桌面版开发中,直至目前共提供了三套 UI 开发方式;Awt、Swing、JavaFx,以及一些扩展组件 SWT 等。在这三套 UI 组件中,JavaFx 是最新也是最为好用的,因为他提供了丰富的功能,以及...

bugstack虫洞栈 3610

EXISTS 和 NOT EXISTS 、IN (和 NOT IN)

IN (和 NOT IN ) EXISTS 和 NOT EXISTS

weixin_51288065的博客 1773

④ Django创建用户中心应用users,扩展用户信息

本章配套视频教程 Django创建用户中心应用users,扩展用户数据 在settings.py文件中配置项目 1、语言配置:LANGUAGE_CODE = 'zh-hans’ 2、时区配置:TIME_ZONE = 'Asia\Shanghai’ 3、模板路径配置:‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)], 并创建templates文件

轻编程的博客 672

MySQL in和exists 查询分析

in和exists执行时,in是先执行内查询,然后再执行外查询。而exists查询它是先执行外查询,然后再执行内查询(这里的内外查询不理解可以结合上面的分析理解)。exists和in在执行时效率单从执行时间来说差不多,exists要稍微优干in,在使用时一般应该是用exists而不用in。如果内查询得出的结果集记录较少,外查询中的表较大且又有索引时应该用in,反之如果外查询记录较少,内查询中的表大,又有索引时使用exists。...

神韵 5105

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

in和exists的区别

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

M_Jack的博客 3570

IMSL CNL 7.0.0 (x86-64)Crack

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

exists和not exists用法 代替in和not in

sql exists和not exists用法   exists       (sql       返回结果集,为真)    not       exists       (sql       不返回结果集,为真)  如下:  表A  ID   NAME    1       A1  2       A2  3       A3  表B  ID   AID   N

tery001的专栏 861

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【mysql】in和exists的区别,not in、not exists、left join的相互转换

在oracle中,int中数据集的大小超过1000会报错;在mysql中,超过1000不会报错,但也是有数据量限制的,应该是4mb,但不建议数据集超过1000,因为in是可以走索引的,但in中数据量过大索引就会失效exist + not exists 是全量数据,这点与in不同。

weixin_44823875的博客 3318

Exists、 In 、Not Exists、Not In 区别和效率

Exists、 In 、Not Exists、Not In 区别和效率 ​ Exists和in的基本工作原理就不说了可以看这篇博文:https://blog.youkuaiyun.com/qq_38238296/article/details/86601765 ​关于exists和in的效率问题 ​ 很多博客上说in适用于外表大内表小的情况,exists适用于外表小内表大的情况 如果查询的两个表大小相当,那么用in和exists差别不大。 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询

eagle89的专栏 902

in 和 Exists的用法区别

in 和 Exists的用法区别2007-03-19 14:30 1.EXISTS的执行流程        select * from t1 where exists ( select null from t2 where y = x )可以理解为:    for x in (

四毛的专栏 3798

in和exists的效率

in适合于外表大而内表小的情况,exists适合于外表小而内表大。 SELECT * FROM A WHERE A.ID IN (SELECT B.ID FROM B) 此时如果A表数据远大于B表数据时,此时使用这种关联方式效率大于使用exists SELECT * FROM A WHERE EXISTS ( SELECT 1 FROM B WHERE A.ID=B.ID ) 此时如果B表数...

weixin_42487516的博客 3567

exists 和not exists 用法简介及与IN和not In的区别

使用 EXISTS 和 NOT EXISTS 引入的子查询可用于两种集合原理的操作:交集与差集。两个集合的交集包含同时属于两个原集合的所有元素。差集包含只属于两个集合中的第一个集合的元素。EXISTS:指定一个子查询,检测行的存在。NOT EXISTS:指定一个子查询,检查行的不存在exists (sql 返回结果集为真) not exists (sql 不返回结果集为真=no r

zhoubo200的专栏 3794

Exists、 In 、Not Exists、Not In 四种的执行机制区别

Exists、 In 、Not Exists、Not In 区别和效率 ​ Exists和in的基本工作原理就不说了可以看这篇博文:https://blog.youkuaiyun.com/qq_38238296/article/details/86601765 ​关于exists和in的效率问题 ​ 很多博客上说in适用于外表大内表小的情况,exists适用于外表小内表大的情况 如果查询的两个表大小相当,那么...

qq_38238296的博客 1689

IN和EXISTS

IN和EXISTS区别及应用场景以及not in和not exists的区别的介绍

学习记录和总结 5938

IN和EXISTS、not in 和not exists的效率详解

从效率来看: 1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ; T1数据量小而T2数据量非常大时,T1<<T2 时,1) 的查询效率高。 2) select * from T1 where T1.a in (select T2.a from T2) ; T1数据量非常大而T2数...

weixin_30326745的博客 753

关于Oracle中in和exists的区别

以Oracle数据库为例 1 exists的使用 Exists用于只能用于子查询,可以替代in,若匹配到结果,则退出内部 查询,并将条件标志为true,传回全部结果资料,in不管匹配到匹配不到都 全部匹配完毕,使用exists可以将子查询结果定为常量,不影响查询效果, 而且效率高。如查询所有销售部门员工的姓名,对比如下: IN is often better if the result

小e笔记 3万+
上一篇: 关于反射和动态代理
下一篇: Spring boot错误处理以及定制错误页面
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值