gpt4 book ai didi

sql - 如何更快地执行 SQL 'NOT IN' 查询?

转载 作者:太空狗 更新时间:2023-10-30 01:41:45 25 4
gpt4 key购买 nike

我有一个电子邮件地址表 (EMAIL):

EmailAddress
------------
jack@aol.com
jill@aol.com
tom@aol.com
bill@aol.lcom

和黑名单电子邮件地址表 (BLACKLIST):

EmailAddress
------------
jack@aol.com
jill@aol.com

我想选择那些在 EMAIL 表中但不在 BLACKLIST 表中的电子邮件地址。我在做:

SELECT EmailAddress
FROM EMAIL
WHERE EmailAddress NOT IN
(
SELECT EmailAddress
FROM BLACKLIST
)

但是当行数变得非常高时,性能会很糟糕。

我怎样才能更好地做到这一点? (如果可能,假设通用 SQL。如果不能,假设 T-SQL。)

最佳答案

您可以使用左外连接或 not exists 子句。

左外连接:

select E.EmailAddress
from EMAIL E left outer join BLACKLIST B on (E.EmailAddress = B.EmailAddress)
where B.EmailAddress is null;

不存在:

select E.EmailAddress
from EMAIL E where not exists
(select EmailAddress from BLACKLIST B where B.EmailAddress = E.EmailAddress)

两者 都是非常通用的 SQL 解决方案(不依赖于特定的数据库引擎)。我会说后者的性能要好一些(虽然不是很多)。但绝对比 not in 性能更高。

正如评论者所说,您还可以尝试在 BLACKLIST(EmailAddress) 上创建索引,这应该有助于加快查询的执行速度。

关于sql - 如何更快地执行 SQL 'NOT IN' 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9230878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com