【发布时间】:2016-04-14 13:01:39
【问题描述】:
我在问自己应该使用<> ALL 还是NOT IN。看看这两个示例查询:
SELECT PersonId FROM tabPerson
WHERE PersonId <> ALL(SELECT ParentId FROM tabPerson)
SELECT PersonId FROM tabPerson
WHERE PersonId NOT IN(SELECT ParentId FROM tabPerson)
这两个查询返回完全相同的结果。
现在我想知道<> ALL 和NOT IN 之间的主要区别是什么。有人有想法吗?
【问题讨论】:
-
如果您希望其他人了解您的查询,请使用
NOT IN -
我假设第二次短路,但编译器可能会识别出等价性。您实际上可以在 SSMS 中运行这两个查询并查看实际的查询计划。你不知道该怎么做吗?
-
@TimSchmelter 我知道
<> ALL的可读性不如NOT IN,我讨厌不可读的代码,但是我想知道它们之间的性能或执行是否有任何差异。 -
哈,刚刚运行,查询计划100%完全一样。所以真的没有区别,只是在可读性上。更好的可读性始终是最好的选择。
-
我从 sql server 6.5 开始就一直在使用 sql server,直到今天才听说过 ALL。 BOL 中的示例非常人为,以至于在现实世界中没有人会编写这样的查询。 msdn.microsoft.com/en-us/library/ms178543.aspx
标签: sql-server performance tsql execution