当前位置:网站首页>Mysql的in和exists用法区别
Mysql的in和exists用法区别
2022-08-03 07:40:00 【棒棒吃不胖】
一.构建模拟环境
表A有某学校所有学生的姓名
表B有某学校所有的班级
要求通过班级查询所有学生的姓名
二.比较
1)首先用in查询姓名
select * from A where name in (select name from B);
该命令等价于
先走子查询 select name from B;
再走A表 select * from A where A.name=B.name;
它相当于一个大循环,嵌套着里面的一个小循环
其中子查询为外部循环,主查询语句是内部的循环
可以看出:
内表的结果无论如何都需要遍历(外层循环),这是不可避免的。
所以子查询A小于B,使用in性能越好。
2)用exists查询姓名
select * from A where exists ( select 1 from B where A.name=B.name );
该命令等价于:
先走表A select * from A;
再走表B select * from B where A.name=B.name;
它也是一个大循环嵌套一个内循环
不过,此处表A查询是外循环
可以看出:
外层表(A)的结果无论如何都需要遍历(外层循环),这是不可避免的。
所以A数据量大于B,使用exists性能越好。
三.结论
当A是外层循环(必须遍历),B是内层循环
A数据量小于B数据量,用in
A数据量大于B数据量,用exists(此时B是外层循环)
一句话:选择外层循环表数据量小的。
边栏推荐
- STL迭代器
- Daily practice of PMP | Do not get lost in the exam-8.2 (including agility + multiple choice)
- mysql存生僻字奇怪问题,mysql为什么不能辨别mb4字符?
- DeFi明斯基时刻:压力测试与启示
- mysql 8.0.12 安装配置方法并--设置修改密码
- 【C语言】函数栈帧的创建和销毁详解
- 【第1天】SQL快速入门-基础查询(SQL 小虚竹)
- Taro框架-微信小程序-内嵌h5页面
- 【图像去噪】基于matlab稀疏表示KSVD图像去噪【含Matlab源码 2016期】
- Roson的Qt之旅#103 QML之标签导航控件TabBar
猜你喜欢

9月考,如何选择靠谱正规的培训机构?

如何像用自来水一样使用数据库?|腾讯云数据库TDSQL-C

Data warehouse buried point system and attribution practice

AI mid-stage sequence labeling task: three data set construction process records

- display image API OpenCV 】 【 imshow () to a depth (data type) at different image processing methods

训练正常&异常的GAN损失函数loss变化应该是怎么样的

postman将接口返回结果生成json文件到本地

The ORB - SLAM2 extracting feature points

xshell开启ssh端口转发,通过公网机器访问内网机器

Mysql如何对两张表的相同字段,同时查询两张数据表
随机推荐
The ORB - SLAM2 extracting feature points
mysql存生僻字奇怪问题,mysql为什么不能辨别mb4字符?
pgaudit 的安装使用《postgresql》
ArcEngine (2) loading the map document
【云原生--Kubernetes】kubectl命令详解
跨域嵌套传递信息(iframe)
C语言实现树的底层遍历--超简代码
服务器资源监控工具-nmon、nmon_analyser
postman将接口返回结果生成csv文件到本地
Neo4j 4.X:导入OWL文件
2022用户画像构建
如何像用自来水一样使用数据库?|腾讯云数据库TDSQL-C
Qt5开发从入门到精通——第二篇(控件篇)
请求与响应:响应
HCIP笔记整理 2022/7/20
Postman will return to the interface to generate a json file to the local
升级
【图像边缘检测】基于matlab灰度图像的积累加权边缘检测【含Matlab源码 2010期】
STL-vector容器
DSP-ADAU1452输出通道配置