繁体   English   中英

是否可以优化此SQL查询

[英]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不会生成匹配项,因此不会排除该行。

比较两组不匹配项的第三种方法是使用外部联接。 我不认为有什么理由可以从目前的内容中进行探讨,所以现在让我继续讨论。

明确的答案将取决于很多变量(因此,对您的问题的评论)...

  1. Publication_id列的基数(不同值的数量)是多少?
  2. 列上有索引吗?
  3. 表中有几行?
  4. 您从哪里获得NOT IN子句中的值?
  5. 它们将始终是文字,还是将来自参数或子查询?

... 仅举几个。 当然,找出答案的最佳方法是用不同的方式编写查询,并查看执行时间和查询计划。

编辑另一个是使用EXCEPT之类的集合运算符。 再说一遍,可能太过分了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM