自连接 in和exits比较

ESP32-P4 GPIO双域架构:HP/LP分离、寄存器级控制与低功耗工程实践 GPIO(通用输入输出)是嵌入式系统中最基础且高频使用的硬件接口,其性能、灵活性与功耗特性直接影响产品实时性与续航能力。现代高性能MCU如ESP32-P4通过HP/LP双电源域分离、可编程IO复用(IO MUX)、信号交换矩阵及硬件自动化机制(如ETM事件、Sigma-Delta调制),将传统GPIO升级为兼具模拟能力、亚微秒响应与微安级待机的智能外设子系统。其核心价值在于实现引脚功能动态重构、中断零延迟处理、Deep-sleep期间自主唤醒与多核安全操作。典型应用场景涵盖工业PLC信号采集、电池供电传感器 阅读详情

先看我从网上找的一段话:

*************************************开始线***********************************************

有两个简单例子,以说明 “exists”和“in”的效率问题

1) select * from T1 where exists(select 1 from T2 whereT1.a=T2.a) ;

T1数据量小而T2数据量非常大时,T1<<T2时,1) 的查询效率高。

2) select * from T1 where T1.a in (select T2.a from T2) ;

T1数据量非常大而T2数据量小时,T1>>T2时,2) 的查询效率高。

exists 用法:

其中 “select 1 from T2 where T1.a=T2.a” 相当于一个关联表查询,相当于

“select 1 from T1,T2 whereT1.a=T2.a”

但是,如果你当当执行 1) 句括号里的语句,是会报语法错误的,这也是使用exists需要注意的地方。

“exists(xxx)”就表示括号里的语句能不能查出记录,它要查的记录是否存在。

因此“select 1”这里的“1”其实是无关紧要的,换成“*”也没问题,它只在乎括号里的数据能不能查找出来,是否存在这样的记录,如果存在,这 1) 句的where条件成立。

in 的用法:

继续引用上面的例子

“2) select * from T1 where T1.a in (select T2.a from T2) ”

这里的“in”后面括号里的语句搜索出来的字段的内容一定要相对应,一般来说,T1和T2这两个表的a字段表达的意义应该是一样的,否则这样查没什么意义。

打个比方:T1,T2表都有一个字段,表示工单号,但是T1表示工单号的字段名叫“ticketid”,T2则为“id”,但是其表达的意义是一样的,而且数据格式也是一样的。这时,用2)的写法就可以这样:

“select * from T1 where T1.ticketid in (select T2.id from T2)”

Select name from employee where name not in (select name fromstudent);

Select name from employee where not exists (select name fromstudent);

第一句SQL语句的执行效率不如第二句。

通过使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。Oracle在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN通常查询速度快的原因


*************************************结束线***********************************************


如果两个表数相当呢,那么应该用什么呢?看下面的两个列子

1)使用in

select distinct to_char(t.operate_time,'yyyy-MM-dd') as operate_time,t.machineid from jscnbi.bi_logfile t where t.machineid in (
            select distinct t.machineid
                  from jscnbi.bi_logfile t
                 where t.operate_time < trunc(sysdate)
                   and t.operate_time >= trunc(sysdate)-1)

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        3     52.88      51.65      32394      48663          0        2075
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        5     52.88      51.65      32394      48663          0        2075

Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 82

Rows     Row Source Operation
-------  ---------------------------------------------------
   2075  HASH UNIQUE (cr=48663 pr=32394 pw=0 time=51655844 us)
78208204   FILTER  (cr=48663 pr=32394 pw=0 time=312853616 us)
78208204    HASH JOIN  (cr=48663 pr=32394 pw=0 time=78228988 us)
   8961     TABLE ACCESS BY INDEX ROWID BI_LOGFILE (cr=3115 pr=0 pw=0 time=62808 us)
   8961      INDEX RANGE SCAN IND_BI_LOGFILE_2 (cr=27 pr=0 pw=0 time=26962 us)(object id 78233)
1132012     TABLE ACCESS FULL BI_LOGFILE (cr=45548 pr=32394 pw=0 time=1132130 us)


2)使用exits

select  distinct to_char(t.operate_time,'yyyy-MM-dd') as operate_time,t.machineid from jscnbi.bi_logfile t where exists (
            select 1
                  from jscnbi.bi_logfile tt
                 where tt.operate_time < trunc(sysdate)-2
                   and tt.operate_time >= trunc(sysdate)-3
                   and tt.machineid = t.machineid)

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        3      1.01       0.99      32519      48663          0        2075
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        5      1.02       0.99      32519      48663          0        2075

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 82

Rows     Row Source Operation
-------  ---------------------------------------------------
   2075  HASH UNIQUE (cr=48663 pr=32519 pw=0 time=1002840 us)
 151147   FILTER  (cr=48663 pr=32519 pw=0 time=1531760 us)
 151147    HASH JOIN RIGHT SEMI (cr=48663 pr=32519 pw=0 time=1078311 us)
   8961     TABLE ACCESS BY INDEX ROWID BI_LOGFILE (cr=3115 pr=1 pw=0 time=53836 us)
   8961      INDEX RANGE SCAN IND_BI_LOGFILE_2 (cr=27 pr=0 pw=0 time=17965 us)(object id 78233)
1132012     TABLE ACCESS FULL BI_LOGFILE (cr=45548 pr=32518 pw=0 time=1132114 us)
     
比较上面两个差别,发现基本上一样,但是红色的部分,是不是也就意味着差不多的时候也是用的exists呢?恩,应该是这样的!

       


会计引擎:交易与核算分离的前世今生 一、为什么需要会计引擎 金融产品的设计,一如一块硬币需要兼顾两面:一面是为客户提供好的金融服务,满足客户支付结算、借贷、资产保值增值等方面的需求,并在这个过程中,以数字化的方式做好客户资产的登记,登记的载体,则是“分户”或“台账”,如客户存款户,是一种典型的分户--资金的增减变化都在一个账户中进行体现,而客户购买的银行理财,因为收益率、期限、投资标的不同,每一笔持有就形成一行记录,即为“台账”--这当然是不严谨但相对形象的表述。但是,“分户”和“台账”并没有必然的区别,以贷款为例,一些银行仍然存在所谓“ 阅读详情

相关推荐

Reactor 响应式编程(第一篇:Reactor核心)

响应式:响应式编程: 全异步、消息、事件回调默认还是用当前线程,生成整个流、发布流、流操作.log();//只要不指定线程池,默认发布者用的线程就是订阅者的线程;

moments的博客 1572

IN、EXISTS和表连接三者的效率比较

一、 IN和EXISTS比较 在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行查询。此时就会用到IN和EXISTS。 例如:查询departments表中存在的部门的人数。 1、 使用IN SQL> set timing on SQL> select employees.department_id,count(*) 2 from employees 3 w...

u014644574的博客 4871

C语言|深入浅出讲解int转换为float全过程(附2017年统考大题案例)

int转换为float类型为什么会发生精度损失? 精度损失的详细过程究竟是什么样的? 什么样情况float会发生精度损失?没有弄懂2017年浮点数统考大题? 这一篇用2017年统考大题案例帮你更深的理解浮点数的存储规则。

DADONGOOO的博客 1万+

mysql连接查询和in的效率取舍

例如: A表 id   子id    父id 1      3        2 2      5        2 3      4         3 B表 id    name 3      xxx 5       xxx 首先我要得到a表父id为2的项 在用获得的子id去查B表 连接查询:select name from A right join  B on

风清的博客 1万+

wps js宏获取工作簿、工作表、单元格的值、链接转图片、单元格区域数据转二维数组、保存工作簿的常用Excel操作

wps js宏入门看这里,我写了常用的js操作Excel的方法:获取工作簿对象、获取工作表对象、获取单元格的值、链接转图片、生成条形码图片、单元格区域数据转二维数组方法、保存工作簿、弹出输入框、YesNo选择框,助你从VBA转战JS。

huaermeier的博客 3万+

告别裸机SPI!用HAL库和CubeMX重新玩转STM32与MAX6675温度传感器

本文详细介绍了如何利用STM32CubeMX和HAL库高效驱动MAX6675温度传感器,实现稳定可靠的热电偶温度监测系统。通过图形化配置SPI接口和封装专用驱动函数,开发者可以快速构建嵌入式温度测量方案,适用于工业控制、物联网设备等多种应用场景。

weixin_42525632的博客 234

【数据库&sql】EXISTS、NOT EXISTS、IN、NOT IN的分析及示例

此处相当于判断是否存在SNO的值为S2,且PNO不在集合T1中的数据,若有则返回true,否则返回false。显然若集合T1包含S2的零件集合的话,集合T1的补集是不会和S2的零件集合有交集的,即会返回false。总体来讲,就是判断当前供应商所供应的零件集合是否包含s2所供应的零件的集合。相反,它用于检查一个列的值是否不在指定的值列表中。语句通常不返回具体的列值,而只关心是否存在满足条件的行,即判断true或false。这一行是为了在结果中排出S2,因为S2的零件集合一定是包含它本身的,因而会在结果中。

归忆_AC的博客 4717

从零开始的 AI Infra 学习之路

AI Infra(AI 基础设施)是指为上层的 AI 算法应用提供支持的 AI 全栈底层技术,通过合理利用计算机体系结构,可以实现 AI 计算的加速和部署。AI Infra 主要包括以下内容:AI 训练框架 & 推理引擎;AI 编译 & 计算架构;AI 硬件 & 体系结构。参考资料:;。

AI Infra / LLM / 软件开发 3万+

数据库sql语句的exists总结

数据库sql语句的exists总结 sql exists in 学习   先来比较下语法: --deals=交易表,areas=地域表,例如香港;我们的目的:查看有交易的地域 select * from areas where id in (select city_id from deals); select * from areas where id in   (select city...

fantaxy025025的专栏 1510

YOLO26优化:注意力魔改 | 用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测,暴力涨点

用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 490

OpenHarmony RK3568 从 32 位切换到 64 位用户空间指南

修改了编译参数(如修复 Q5 后),但 ThinLTO 缓存中保留了旧参数编译的 bitcode。这是一种节省内存的设计(32 位指针占 4 字节 vs 64 位占 8 字节),但在某些场景下需要切换为纯 64 位。切换到 64 位用户空间后,CPU 全程运行在 AArch64 状态,不再需要 AArch32 兼容模式。内核本身已经是 64 位(aarch64),切换用户空间位数不影响内核。(32 位兼容层)在纯 64 位系统中不再需要,可以关闭以减小内核体积。这两个参数对 64 位编译毫无意义,配合。

程小二的博客 690

sql查询中使用in和exits比较和区别

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

ywl470812087的博客 11万+

Ultralytics 框架中predict 与 track 的区别

在 Ultralytics 框架中,predict 和 track 是两种不同的推理方法,分别用于目标检测(或分割、姿态估计)和目标跟踪任务。

浩瀚之水的专栏 1127

sql in 和 exits

一 .概念 in 查询返回一个列表,提供的列表给外查询使用 exit 是对自查询进行判断是否存在行,存在则 true,不存在则为 false for x in ( select * from t1 ) loop if ( exists ( select null from t2 where y = x.x ) then OUTPUT THE RECORD! end if end loop 二.使用性能 1. 如果查询的两个表大小差...

weixin_51194339的博客 2539

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SQL语句中in not in exits not exits用法比较

<br /><br /><br />exists (sql 返回结果集为真) <br />not exists (sql 不返回结果集为真) <br />如下: <br />表A <br />ID NAME <br />1    A1 <br />2    A2 <br />3  A3 <br /> <br />表B <br />ID AID NAME <br />1    1 B1 <br />2    2 B2 <br />3    2 B3 <br /> <br />表A和表B是1对多的关系 A.ID

zhangweikai的专栏 7712

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SQL语句中exits和in的区别

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

qq_44696583的博客 2745

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

in 和exits 的区别

<br />SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别:<br /><br />IN:确定给定的值是否与子查询或列表中的值相匹配。<br />IN 关键字使您得以选择与列表中的任意一个值匹配的行。<br />当要获得居住在 California、Indiana 或 Maryland 州的所有作者的姓名和州的列表时,就需要下列查询:<br />SELECT ProductID, ProductName FROM Northwind.dbo.Products WHERE Cate

diguoguo的专栏 1578

Mysql exits和in的区别

使用exits和in查询的结果都相同,但是其中运行的机制并不一样。 举例:返回参加考试的人 1.exits SELECT * FROM people WHERE EXISTS(SELECT 1 FROM test WHERE people.id=test.user_id); 这里exits子查询中 select 1 其实这个1可以是任何数字,因为在exits中返回的结果并不重要,重要的是此处用的是索引查询,判断是否有符合要求的结果,

qq_39751320的博客 1108

Exits和In

twtiqfn的专栏 699

SQL-Exists与IN用法比较

一、EXISTS用法说明 EXITS谓词代表 存在量词,带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值TRUE或逻辑假值FALSE。只要EXITS引导的子句有结果集返回,该条件即成立,EXITS不在乎返回的是什么内容,只在乎是否有结果集返回。 如: select * from customer where not exists( select 0 from customer_goo...

MsSpark的博客 3515

[转]理解NULL是如何影响IN和EXITS语句的

理解NULL是如何影响IN和EXITS语句的 [转自]http://www.linuxpk.com/49217.html 从表面上看,IN和EXITS的SQL语句是可互换和等效的。然而,它们在处理UULL数据时会有很大的差别,并导致不同的结果。问题的根源是在一个Oracle数据库中,一个NULL值意味着未知变量,所以操作NULL值的比较函数的结果也是一个未知变量,而且任何返回NULL的值通

空心居 917

Mysql的in与exits

IN和EXISTS是MySQL中用于子查询的两种不同的条件操作符。它们在使用和实现上有一些区别。

Artisan_w 1500

Mysql left和in性能_exits, in, left join性能比较

exits in left join性能比较 ,笔者使用的是MYSQL数据库,这三个关键字方法在其他的关系数据库里也是大同小异,如果各种有兴趣,自行比较。我这里有一个249_account 表,总数为8538507 249001_account_temp表 总数为 8242734其中有部分数据,249_account里有,249_account_temp表里没有,要求找出249_accoun...

weixin_28965077的博客 3817

理解null如何影响in和exits语句

从表面上看,in和exits的sql语句是可互换和等效的。然而,它们在处理uull数据时会有很大的差别,并导致不同的结果。问题的根源是在一个oracle数据库中,一个null值意味着未知变量,所以操作null值的比较函数的结果也是一个未知变量,而且任何返回null的值通常也被忽略。例如,以下查询都不会返回一行的值: select true from dual where 1 = nul

Eyifan专栏 1484

exits, in, left join性能比较

exits in left join性能比较 ,笔者使用的是MYSQL数据库,这三个关键字方法在其他的关系数据库里也是大同小异,如果各种有兴趣,自行比较。 我这里有一个249_account 表,总数为8538507 249001_account_temp表 总数为 8242734 其中有部分数据,249_account里有,249_account_temp表里没有,要求...

weixin_30920853的博客 350

Sql语句中in和exits的区别

“小明” in (select sname from student) 等同于 exists (select * from student where sname=“小明”) 这两个涵数是差不多的, 但是由于优化方案的不同, 通常NOT EXISTS要比NOT IN 要快, 因为NOT EXISTS可以使用结合算法而NOT IN 就不行了,而EXISTS则不如IN快, 因为这时候IN可能更多的使用...

zhuxinyu7的博客 532
上一篇: ass109.awk脚本学习使用
下一篇: oracle 10gORA-07445 RAC环境下一个案例
RuleV5
博客等级 码龄16年 61粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值