DB2 NOT EXISTS 与NOT IN效率比较

本文探讨了DB2中NOT EXISTS与NOT IN两种查询方式的效率问题。通常认为EXISTS效率更高,但作者通过实际测试发现,在某些情况下IN的效率优于EXISTS。文中介绍了两者的工作原理,并提供了测试例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看牛新庄的《DB2数据库性能调整和优化》,他里面提及到NOT EXISTS与NOT IN的效率比较问题。 网上也看了不少讨论。按照书中结论EXISTS比IN 的效率高。网上也有相关的文章。也有无数网友推荐用EXISTS。但是我测试出来的结果是IN的效率比EXISTS高。


我们先来梳理EXISTS 与 IN的工作原理:

EXISTS是先得到外层表的结果集(例子中CUSTOMER中的结果),用外层表结果集一条一条在内层表中(TXNSALE)查询。

IN 是先生成内层表结果集(TXNSALE),再用外层表结果集到内层表去做比较。

书中的结论:外层结果集大,内层结果集小时,EXISTS效率高。外层结果集大,内层结果集小时,IN的效率高。

测试的结果:都是IN的效率高。


例子:

NOT IN 与 NOT EXISTS 的比较
查找出没有交易的客户和客户姓名,并统计他们的人数
CUSTOMER表中有6000000+条记录--小表
TXNSALE表中有40000000+条记录--大表

第一组比较:
外层表结果集数据小,内层表结果集大。按照书中的结论,外层循环是小结果集,内层循环大结果集, 用EXISTS效率高。结果是采用IN的效率更高,EXISTS耗时18秒,IN耗时15秒。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值