当前位置:网站首页>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是外层循环)
一句话:选择外层循环表数据量小的。
边栏推荐
猜你喜欢
数据库表结构文档 生成工具screw的使用
ViewModel 记录下 +
用云机器/虚拟机架设方舟游戏?
2022用户画像构建
sqlserver2019安装失败
Shell运维开发基础(一)
计算机网络常见面试题总结
AI mid-stage sequence labeling task: three data set construction process records
22-08-02 西安 尚医通(02)Vscode、ES6、nodejs、npm、Bable转码器
pyspark---encode the suuid interval (based on the number of exposures and clicks)
随机推荐
推荐系统-排序层-模型:Wide&Deep
tmp
请求与响应:响应
DeFi明斯基时刻:压力测试与启示
requests库
ceph简介
ArcEngine(三)通过MapControl控件实现放大缩小全图漫游
mysql的innodb存储引擎和myisam存储引擎的区别
【Kaggle实战】泰坦尼克号生存人数预测(从零到提交到Kaggle再到模型的保存与恢复)
Poke the myth of Web3?Poke the iron plate.
Windows安装MySQL(MIS)
STL - string
实时目标检测新高地之#YOLOv7#更快更强的目标检测器
DSP Trick:向量长度估算
[ 漏洞复现篇 ] yapi 代码执行 getshell 漏洞复现详解
依赖注入(DI),自动配置,集合注入
postman将接口返回结果生成json文件到本地
AI中台序列标注任务:三个数据集构造过程记录
mysql系统变量与状态变量
数据库表结构文档 生成工具screw的使用