“不受待见”的 in 和 not in【送源码】

MySQL使用Not in查询效率慢的优化 问题复盘,在查询某个数据不在另一个表中,查询时间非常慢,10几秒。究其原因not in不走索引。那么怎么解决优化呢,下面是简单记录。 阅读详情

# WHY?

IN 和 NOT IN 是比较常用的关键字,为什么要尽量避免呢?

1、效率低 

项目中遇到这么个情况:

t1表 和 t2表  都是150w条数据,600M的样子,都不算大。

但是这样一句查询 ↓

select * from t1 where phone not in (select phone from t2)

直接就把我跑傻了。。。十几分钟,检查了一下  phone在两个表都建了索引,字段类型也是一样的。原来not in 是不能命中索引的。。。。

改成 NOT EXISTS 之后查询 20s ,效率真的差好多。

select * from t1
where  not  EXISTS (select phone from t2 where t1.phone =t2.phone)

2、容易出现问题,或查询结果有误 (不能更严重的缺点)

以 IN 为例。建两个表:test1 和 test2

create table test1 (id1 int)
create table test2 (id2 int)
insert into test1 (id1) values (1),(2),(3)
insert into test2 (id2) values (1),(2)

我想要查询,在test2中存在的  test1中的id 。使用IN的一般写法是:

select id1 from test1
where id1 in (select id2 from test2)

结果是: 

图片

OK 木有问题!

但是如果我一时手滑,写成了:

select id1 from test1where id1 in (select id1 from test2)

不小心把id2写成id1了 ,会怎么样呢?

结果是:

图片

EXCUSE ME!为什么不报错? 

单独查询 select id1 from test2 是一定会报错: 消息 207,级别 16,状态 1,第 11 行 列名 'id1' 无效。

然而使用了IN的子查询就是这么敷衍,直接查出 1 2 3

这仅仅是容易出错的情况,自己不写错还没啥事儿,下面来看一下 NOT IN 直接查出错误结果的情况:

给test2插入一个空值:

insert into test2 (id2) values (NULL)

我想要查询,在test2中不存在的  test1中的id 。

select id1 from test1
where id1 not in (select id2 from test2)

结果是:

图片

空白!显然这个结果不是我们想要的。我们想要3。为什么会这样呢?

原因是:NULL不等于任何非空的值啊!如果id2只有1和2, 那么3<>1 且 3<>2 所以3输出了,但是 id2包含空值,那么 3也不等于NULL 所以它不会输出。

(跑题一句:建表的时候最好不要允许含空值,否则问题多多。)

# HOW?

1、用 EXISTS 或 NOT EXISTS 代替

select * from test1
   where EXISTS (select * from test2 where id2 = id1 )
select * FROM test1
 where NOT EXISTS (select * from test2 where id2 = id1 )

​​​​2、用JOIN 代替

select id1 from test1
   INNER JOIN test2 ON id2 = id1
select id1 from test1
   LEFT JOIN test2 ON id2 = id1
   where id2 IS NULL

妥妥的没有问题了!

PS:那我们死活都不能用 IN 和 NOT IN 了么?并没有,一位大神曾经说过,如果是确定且有限的集合时,可以使用。如 IN (0,1,2)。

- EOF -

 给大家分享一套基于Springboot+Vue的医院管理系统源码,在实际项目中可以直接复用。(免费提供,文中自取)

系统运行图(设计报告和接口文档)

1、后台管理页面

2、排班管理页面

3、设计报告包含接口文档


源码免费领取方式

扫码后台回复 “医院”

 

AI办公Agent技术:文档与表格智能处理实践 办公自动化技术正从规则驱动转向语义理解,大语言模型(LLM)为办公Agent赋予了智能决策能力。这类系统通过五层架构整合自然语言处理、工具API调用和任务规划引擎,能自动完成文档分类、表格分析等高重复性工作。关键技术包括基于TF-IDF和BERT的特征提取、Excel公式自动生成等,在财务报告、法律审查等场景可实现90%以上的效率提升。随着多模态能力和领域专业化发展,办公Agent正在重塑企业文档处理流程,成为数字化转型的核心基础设施。 阅读详情

相关推荐

学习笔记【Day 20】鸿蒙PC应用在SD WAN MSTP场景用CodeArts test工具测试过程

多生成树协议(MSTP)作为二层网络高可靠、无环路的核心技术,其在鸿蒙 PC 上的兼容性与稳定性测试尤为重要。本文结合华为云 CodeArts TestPlan 全流程测试管理平台,详细拆解鸿蒙 PC 端 MSTP 功能的测试设计、环境搭建、执行验证。1.测试左移,保障迭代效率CodeArts TestPlan 将 MSTP 测试从后期集成阶段 “左移” 至开发早期,通过可复用用例库与自动化脚本,支持每次代码提交后的快速回归测试,避免网络功能稳定性因迭代被破坏。2.平台化工具破解复杂场景测试难题。

aiyijianghe的博客 1059

MySQL not in查询不出数据(MySQL not in 无效)

MySQL not in查询不出数据(MySQL not in 无效)

gaoshan12345678910的博客 1万+

【AI平台】n8n入门2:第一个工作流,调用本地大模型

n8n是一款开源的,专注于AI工作流构建,支持灵活的自定义与集成。就是可以把大模型和其他工具联合起来,这就厉害了。而且,免费功能又强大,目前很火,来研究一下。

正经教主是个热衷于正经学习分享的教主。 4536

Mysql基础教程(06):NOT IN

NOT IN 是 IN 的否定操作符,本文通过实例介绍了 MySQL 中如何使用 NOT IN 判断一个值是否不包含在一个值列表中。

WwLK123的博客 2936

3D-IC测试挑战与Tessent解决方案解析

3D-IC技术通过硅通孔(TSV)实现芯片垂直堆叠,是延续摩尔定律的关键路径。该技术面临三大核心挑战:KGD标准严苛化要求测试覆盖率达99.5%以上,存储器测试需兼容LPDDR/HBM等多种协议,逻辑堆叠需解决TSV互连的电气特性和时序验证问题。Mentor Tessent平台采用混合测试架构,结合压缩扫描测试(ATPG)和内建自测试(BIST)技术,实现100x测试数据压缩比和99.97%的TSV缺陷检出率。这些创新方案在移动SoC和高性能计算芯片中已获验证,测试时间缩短73%,缺陷逃逸率降低77%。随着

weixin_30621711的博客 376

特斯拉 Model 3解析(八)全面拆解特斯拉自动驾驶大脑:AP控制器硬核技术解析

算力极限:双FSD = 144 TOPS,专为AI推理优化。存储架构:LPDDR4 + NAND + NOR,保证高速/可靠启动。通信架构:以太网传视频,CAN传控制,TSN保障实时性。感知输入:多路摄像头 + 高速SerDes,满足全景感知。电源设计:功率模块+被动元件海洋,稳定性优先。功能安全:双芯片冗余 + GPS + 紧急呼叫,容错率极高。🎯 在我看来,特斯拉AP控制器就是一台“车载超算”,它在电源设计、存储架构和功能安全上远超一般新势力方案。

weixin_43199439的博客 1447

MySql中NOT IN使用时的注意事项

在MySql中,NOT IN是用来查询不在某个值集的数据。 NOT IN的使用需要注意NULL值判断,如果数据库查询出来的字段值为NULL时,NOT IN是走不通的,如: SELECT name, age FROM USER WHERE age NOT IN(12,13) 上面这个sql语句用于查询user表中age不等于12或13的所有用户,如果有一个用户没有添加age信息,此时数据库中该字段为NULL,那么这条数据是查不出来的,如果想要查出age为NULL的数据,可以判空来解决: SELECT nam

jl15988 1万+

手把手教你使用ConvNeXt训练自己数据集和推理,ConvNeXt模型训练(CVPR 2022),一个能挑战 Vision Transformer 的卷积神经网络,含完整代码和数据集

手把手教你使用ConvNeXt训练自己数据集和推理,ConvNeXt模型训练(CVPR 2022),一个能挑战 Vision Transformer 的卷积神经网络,含完整代码和数据集

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1458

MySQL(42)MySQL IN和NOT IN用法详解

MySQL 中的 IN 运算符用来判断表达式的值是否位于给出的列表中;如果是,返回值为 1,否则返回值为 0。NOT IN 的作用和 IN 恰好相反,NOT IN 用来判断表达式的值是否不存在于给出的列表中;如果不是,返回值为 1,否则返回值为 0。expr 表示要判断的表达式,value1, value2, value3 ... valueN 表示列表中的值。MySQL 会将 expr 的值和列表中的值逐一对比。由结果可以看到,IN 和 NOT IN 的返回值正好相反。

逍遥人世欢 3054

多跳问答技术解析:从原理到金融领域实践

多跳问答(Multi-hop QA)是自然语言处理中的高级任务,要求系统通过多步推理整合分散信息来回答问题。其核心技术在于理解文档间的复杂关联,相比单跳问答需要更精细的数据集设计和模型架构。在金融、医疗等专业领域,多跳问答能有效处理如'腾讯大股东投资的港股上市公司'这类需要串联多个信息点的问题。典型实现方案包括MR-Search框架的三级检索器设计,分别处理实体召回、关系匹配和数值比较。当前最佳实践表明,结合稠密检索与稀疏检索的混合策略,配合动态路由机制,能在保持较高精度的同时控制计算成本。这类技术在金融风

weixin_42566072的博客 607

手把手教你学Simulink——机器人控制场景实例:基于Simulink的双足人形机器人步态生成与ZMP稳定控制仿真

ZMP是地面上合力矩在水平方向为零的点。对于平面行走: [ x_{\text{zmp}} = x_c - \frac{z_c}{g} \ddot{x}_c ]📌稳定性判据ZMP必须始终位于支撑脚的凸包(即脚掌范围内)本文完成了基于Simulink的双足人形机器人ZMP稳定控制仿真,实现了:✅ 基于LIPM生成稳定CoM轨迹✅ 构建ZMP参考与验证机制✅ 设计简化踝关节PD控制器✅ 验证ZMP始终位于支撑脚内 → 动态平衡✅ 为人形机器人步态规划奠定理论基础。

MHD0815的博客 139

报错:exec:"gcc" executable file not found in %PATH%

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33911824的博客 2600

Mysql授权允许远程访问

前言 Mysql授权允许远程登录后,linux中安装的mysql可以与Navicat for Mysql(可视化)等连接,在可视化软件下管理数据库。 注意:不能使用临时密码 设置密码命令: alter user 'root'@'localhost' identified by '这里是你的密码'; 授权允许远程访问 一、授权命令: grant all privileges on *.* to '...

🏆 前端领域优质创作者 3万+

面试官:为什么要尽量避免使用 IN 和 NOT IN 呢?

点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!每天14:00更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2021超神之路,很肝~中文详细...

weixin_44421461的博客 262

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

谁再在 SQL 中写 in 和 not in,直接走人!

如果id2只有1和2, 那么3<>1 且 3<>2 所以3输出了,但是 id2包含空值,那么 3也不等于NULL 所以它不会输出。并没有,一位大神曾经说过,如果是确定且有限的集合时,可以使用。如 IN (0,1,2)。十几分钟,检查了一下 phone在两个表都建了索引,字段类型也是一样的。是一定会报错: 消息 207,级别 16,状态 1,第 11 行 列名 'id1' 无效。t1表 和 t2表 都是150w条数据,600M的样子,都不算大。我想要查询,在test2中不存在的 test1中的id。

芋艿V 48

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏原创 | Java 2020超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析...

weixin_44421461的博客 284

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python基础:什么是in /not in字符串?字符串索引是用来做什么的?

咱们之前讲了字符串的比较运算,关于字符串的比较规则大家一定要把它牢记在心里,因为这个规则可以运用到以后咱们要学的列表的比较、元组的比较等。接着咱们来说一下其它的运算符。 一:in / not in运算符 1、in运算符(在……里)作用:in 用于序列、字典、集合中,用于判断某个值是否存在于容器中,如果存在则返回True,否则返回False。 格式:对象 in 容器 例:定义一个变量S,并给这个变...

Python最详细教程 5533

php mysql not in_MySQL not in查询不出数据(MySQL not in 无效)

今天使用 Mysql 的 not in 进行查询的时候,发现结果里面并没有返回任何数据。SQL 语句没有任何问题,但是结果集却是空,实在无法理解。纠结了半天,最后使用 left join,两表关联,找到了目标数据。但是这样的话,难道 not in 就不能使用了吗?最后经过查找,找到了原因。mysql 的 not in 中,不能包含 null 值。否则,将会返回空结果集。对于 not in 来说,如...

weixin_39571749的博客 550

Protocol “https“ not supported or disabled in libcurl

Composer update 报错:Protocol “https“ not supported or disabled in libcurl php代码运行也报错:Protocol “https“ not supported or disabled in libcurl 排查问题: 1.openssl,如果没有安装openssl请百度安装 openssl version -a 2.curl $ curl -V curl 7.77.0 (x86_64-apple-darwin19.6...

lschuangye的博客 1199

Android 必知必会:Task “ijDownloadArtifact“ not found in project【已解决】

升级 Android Studio Narwhal | 2025 后出现 Task 'ijDownloadArtifactXXX' not found 错误。具体解决方操作见文中配图

他叫自己Mr.张 1936

qt.qpa.plugin: Could not find the Qt platform plugin “xcb“ in ““ 详细解决办法

qt.qpa.plugin: Could not find the Qt platform plugin “xcb“ in ““ 详细解决办法

qq_45983373的博客 3万+

python3判断变量存在_Python3基础 list in/not in 判断一个变量是否在列表中存在

Python : 3.7.0OS : Ubuntu 18.04.1 LTSIDE : PyCharm 2018.2.4Conda : 4.5.11typesetting : Markdowncode"""@Author : 行初心@Date : 18-9-23@Blog : www.cnblogs.com/xingchuxin@Gitee : gitee.com/zhichengjiu...

weixin_39916511的博客 1225

安卓源码编译报错Could not find version “14“ in CTS platform version file:

原因:打开的窗口先编译的debug版本,编译环境被设置为debug环境,用此环境在编译了user版本。解决:关掉此窗口重新打开一个新窗口编译即可。

Megumi99的博客 231

WordPress SQL 注入漏洞分析:从 author__not_in 参数到 REST API 全链路

程序和程序之间对话、拿数据、执行功能的通道。REST =把资源的状态,以某种表述格式,在客户端与服务端之间转移。遵循 REST 这套设计风格写出来的 API 接口。可以把 WordPress 看成一个程序。正常情况下:浏览器访问 WordPress,WordPress 返回 HTML,这是给人/浏览器看的。但是现在很多程序并不需要 HTML。"id": 123,它提供一个接口,让应用通过 HTTP 与 WordPress 站点交互,并以 JSON 形式交换数据。目前已经知道:WP_Query。

2303_82039857的博客 396

Spark SQL优化:NOT IN子查询优化解决

有如下的数据查询场景。

zy345293721的博客 2083

windows python3库pydot运行出现:FileNotFoundError: [WinError 2] "dot" not found in path.---完美解决

windows python3库pydot运行出现:FileNotFoundError: [WinError 2] &quot;dot&quot; not found in path.---完美解决测试代码若报错如下(&quot;dot&quot; not found in path):解决方法: 测试代码 #代码可以直接复制运行 from sklearn.datasets import load_iris from sklearn i...

somecare的博客 1万+
上一篇: 【送源码】3.6k Star ,上架即封神!
下一篇: 大量简化代码!Java Stream 简单技巧!【送源码】
架构文摘JGWZ
博客等级 码龄5年 8808粉丝 345原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值