我在过程中得到了以下SQL查询,这可以更优化以获得最佳结果。
SELECT DISTINCT
[PUBLICATION_ID] as n
,[URL] as u
FROM [LINK_INFO]
WHERE Component_Template_Priority > 0
AND PUBLICATION_ID NOT IN (232,481)
ORDER BY URL
请建议,使用NOT Exists是更好的方法。
由于
答案 0 :(得分:0)
可以使用NOT EXISTS。只是从上面的代码开始你可能不应该,但它在技术上是可行的。作为基本规则;一个非常小的,快速解决的集合(两个文字肯定会适用)将作为NOT IN表现得更好而不是NOT EXISTS。当NOT IN必须对NOT EXISTS(在第一次匹配时停止)的相关子查询更快地解析的每一行进行足够的比较时,NOT EXISTS获胜。
这假设比较集不能包含NULL。否则NOT IN和NOT EXISTS不会返回相同的结果,因为NOT IN(NULL,...)总是返回NULL,因此没有行,而NOT EXISTS排除它找到匹配的行,而NULL不会生成匹配,所以不排除该行。
比较两组不匹配的第三种方法是使用OUTER JOIN。我看不出有什么理由从我们到目前为止所做的事情,所以我现在就让那个去。
明确的答案取决于很多变量(因此对你的问题的评论)......
......仅举几例。当然,最好的方法是通过不同的方式编写查询并查看执行时间和查询计划。
编辑另一个是使用像EXCEPT这样的集合运算符。再一次,可能有点过分了。