千家信息网

sql中in与exist效率是怎么样的

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章将为大家详细讲解有关sql中in与exist效率是怎么样的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、IN 与EXISTS1、理解IN的执行流程SEL
千家信息网最后更新 2025年02月23日sql中in与exist效率是怎么样的

这篇文章将为大家详细讲解有关sql中in与exist效率是怎么样的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、IN 与EXISTS
1、理解

IN的执行流程
SELECT * FROM T1 WHERE X IN (SELECT Y FROM T2)
事实上可以理解为:
SELECT * FROM T1, (SELECT DISTINCT Y FROM T2) T2 WHERE T1.X =T2.Y
从这里可以看出,IN需要先处理T2表,然后再和T1进行关联

EXISTS的执行流程

SELECT *FROM T1 WHEREEXISTS (SELECT
NULLFROM T2 WHEREY = X)--可以理解为:for xin (select
* fromt1 ) LOOP if( exists ( selectnull
from t2where y =x.x )THEN OUTPUTTHE RECORD endifend loop

从这里看出,EXISXTS会先查询T1表,然后再LOOP处理T2表

2、结论
对于in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了。
综合以上对IN/EXISTS的讨论,我们可以得出一个基本通用的结论:IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

二、NOT IN 与NOT EXISTS
1、理解

NOT IN的执行流程
SELECT * FROM T1 WHERE X NOT IN (SELECT Y FROM T2)
事实上可以理解为:
SELECT * FROM T1, (SELECT DISTINCT Y FROM T2) T2 WHERE T1.X !=T2.Y

NOT EXISTS的执行流程

SELECT .. ... FROMROLLUP R WHERE NOTEXISTS (SELECT'Found'
FROM
TITLE TWHERE R.SOURCE_ID = T.TITLE_ID);--可以理解为:for xin (select
* fromrollup ) loop if(
not exists ( that query ) ) then OUTPUT endif; end;

注意:NOT EXISTS 与 NOT IN不能完全互相替换,看具体的需求。如果选择的列可以为空,则不能被替换。具体见:in/exists和notin/not exists语意探讨

2、结论
not in 只有当子查询中,select 关键字后的字段有not null约束或者有这种暗示时用notin,另外如果主查询中表大,子查询中的表小但是记录多,则应当使用not in,并使用anti hashjoin.如果主查询表中记录少,子查询表中记录多,并有索引,可以使用not exists,另外not in最好也可以用或者外连接+isnull.一般情况下建议使用not exists

--比如:SELECT .. .... FROMROLLUP R WHERE NOTEXISTS (SELECT'Found'
FROM
TITLE TWHERE R.SOURCE_ID = T.TITLE_ID);--改成SELECT .. .... FROMTITLE T, ROLLUP
R WHERE R.SOURCE_ID =T.TITLE_ID(+) ANDT.TITLE_ID
IS
NULL;--或者SELECT.... .. FROMROLLUP R WHERE OURCE_IDNOT
IN
(SELECTOURCE_ID
FROM TITLE TWHERE OURCE_ID
IS
NOT NULL);

关于"sql中in与exist效率是怎么样的"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

查询 流程 索引 情况 篇文章 结论 驱动 效率 事实 事实上 关键 外层 外表 更多 查询表 结果 处理 不错 实用 较大 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 交通行业网络安全案例报价 大华服务器 英雄联盟国外服务器人数 怎么转行软件开发 网络安全宣传周微视频展映 java rtmp服务器 win10sql数据库文件消失 关系型数据库的结构模型 怎么学面向对象数据库 网络安全工具下载网盘链接 齐鲁工惠网络安全周 国家网络安全宣传周上海活动启动 张店网络审批软件开发公司 阜新节能软件开发 软件开发软件就业 多文件下载用什么服务器程序 计算机网络技术日志 江西理工无线网络技术考试 数据库开发工程师的主要职责模板 中国学盟软件开发 平遥天气预报软件开发 河北数字化城管软件开发电话 分布式数据库是什么 科技教育频道直播网络安全 设置代理服务器要钱么 百度的数据库用什么软件打开 福建正规网络技术咨询报价 安装安全狗服务器会自动重启 数据库开发工程师的主要职责模板 软件开发转行干什么工作
0