How*_*amp 14 sql database sql-server
我有一个电子邮件地址表(EMAIL):
EmailAddress
------------
jack@aol.com
jill@aol.com
tom@aol.com
bill@aol.lcom
Run Code Online (Sandbox Code Playgroud)
和黑名单电子邮件地址的表格(黑名单):
EmailAddress
------------
jack@aol.com
jill@aol.com
Run Code Online (Sandbox Code Playgroud)
我想选择EMAIL表中但不在BLACKLIST表中的那些电子邮件地址.我正在做:
SELECT EmailAddress
FROM EMAIL
WHERE EmailAddress NOT IN
(
SELECT EmailAddress
FROM BLACKLIST
)
Run Code Online (Sandbox Code Playgroud)
但是当行数非常高时,性能非常糟糕.
我怎么能更好地做到这一点? (如果可能,请假设通用SQL.如果不是,请假设使用T-SQL.)
Pab*_*ruz 30
您可以使用左外连接或not exists子句.
左外连接:
select E.EmailAddress
from EMAIL E left outer join BLACKLIST B on (E.EmailAddress = B.EmailAddress)
where B.EmailAddress is null;
Run Code Online (Sandbox Code Playgroud)
不存在:
select E.EmailAddress
from EMAIL E where not exists
(select EmailAddress from BLACKLIST B where B.EmailAddress = E.EmailAddress)
Run Code Online (Sandbox Code Playgroud)
两者都是非常通用的SQL解决方案(不依赖于特定的数据库引擎).我会说后者的性能更高一些(尽管不是很多).但绝对比那个更有效not in.
正如评论者所述,您还可以尝试创建索引BLACKLIST(EmailAddress),这有助于加快查询的执行速度.
| 归档时间: |
|
| 查看次数: |
24065 次 |
| 最近记录: |