【发布时间】:2013-04-18 15:52:19
【问题描述】:
我的查询需要返回所有流水线速率不是“No Usage”的使用记录。
What's the difference between NOT EXISTS vs. NOT IN vs. LEFT JOIN WHERE IS NULL?
我已经看到上述问题并决定使用 IN 而不是 EXISTS,因为表中的值可以为空。以下哪一种更好,更有效,或者有没有其他方法比以下两种更有效?
SELECT *
FROM usagerecords UR
WHERE UR.usagerateid NOT IN (SELECT id
FROM pipelinerate PR
WHERE PR.name = 'No Usage')
SELECT *
FROM usagerecords UR
WHERE UR.usagerateid IN (SELECT id
FROM pipelinerate PR
WHERE PR.name <> 'No Usage')
【问题讨论】:
-
比较执行计划,你就会找到答案。
-
这两个查询甚至不等价。为什么要比较效率?
-
同意@ypercube。在开始担心性能之前,请确保您的查询具有相同的语义并产生相同(正确)的结果。
标签: sql sql-server