SELECT DISTINCT 在使用 NOT IN 子句时是否与 SELECT 不同?
Does SELECT DISTINCT differ from SELECT when using a NOT IN clause?
我的
DELETE FROM FOO
WHERE [FOO_KEY] NOT IN
(
SELECT [FOO_KEY] FROM BAR
)
查询 运行 慢得惊人。我知道BAR很大table,所以忍不住写
DELETE FROM FOO
WHERE [FOO_KEY] NOT IN
(
SELECT DISTINCT [FOO_KEY] FROM BAR
)
但我记得有人告诉我:
- 当
NULL
不是问题时(他们不在这里),IN
和 EXISTS
之间几乎没有任何区别。
- 当使用
EXISTS
时,您不需要使用 SELECT DISTINCT
并且这样做没有性能原因。
这让我有充分的理由相信 绝对可以保证 在此处添加 DISTINCT
不会有什么不同。对吗?
从功能的角度来看,有或没有 DISTINCT
的查询是相同的(它们将删除同一组行)。
从性能的角度来看,我确信 SQL 服务器将始终为两个查询生成相同的执行计划(但我无法证明这一点)。
对于其他数据库引擎,这可能有所不同。参见:
我的
DELETE FROM FOO
WHERE [FOO_KEY] NOT IN
(
SELECT [FOO_KEY] FROM BAR
)
查询 运行 慢得惊人。我知道BAR很大table,所以忍不住写
DELETE FROM FOO
WHERE [FOO_KEY] NOT IN
(
SELECT DISTINCT [FOO_KEY] FROM BAR
)
但我记得有人告诉我:
- 当
NULL
不是问题时(他们不在这里),IN
和EXISTS
之间几乎没有任何区别。 - 当使用
EXISTS
时,您不需要使用SELECT DISTINCT
并且这样做没有性能原因。
这让我有充分的理由相信 绝对可以保证 在此处添加 DISTINCT
不会有什么不同。对吗?
从功能的角度来看,有或没有 DISTINCT
的查询是相同的(它们将删除同一组行)。
从性能的角度来看,我确信 SQL 服务器将始终为两个查询生成相同的执行计划(但我无法证明这一点)。
对于其他数据库引擎,这可能有所不同。参见: