[英]Can this SQL Query be optimized
我在Procedure中有下面的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。 仅仅不应该使用上面的代码,但这在技术上是可能的。 作为基本规则; 一个很小的,快速解析的集合(肯定会应用两个文字)作为NOT IN的效果要比NOT NOTISTS的效果更好。 当NOT IN必须对每一行进行足够的比较以使NOT EXISTS的相关子查询(在第一个匹配项处停止)解析得更快时,NOT EXISTS就会获胜。
假定比较集不能包含NULL。 否则,NOT IN和NOT EXISTS不会返回相同的结果,因为NOT IN(NULL,...)始终返回NULL,因此没有行,而NOT EXISTS排除它找到匹配项的行,而NULL不会生成匹配项,因此不会排除该行。
比较两组不匹配项的第三种方法是使用外部联接。 我不认为有什么理由可以从目前的内容中进行探讨,所以现在让我继续讨论。
明确的答案将取决于很多变量(因此,对您的问题的评论)...
... 仅举几个。 当然,找出答案的最佳方法是用不同的方式编写查询,并查看执行时间和查询计划。
编辑另一个是使用EXCEPT之类的集合运算符。 再说一遍,可能太过分了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.