需要帮助优化简单查询

时间:2014-11-27 12:00:26

标签: sql-server sql-server-2008 sql-server-2008-r2

假设我有以下问题:

SELECT
  COUNT(id) numRows, 
  SUM(value) totSum 
FROM someTable
WHERE foo= @bar

足够简单。它将列foo等于传递参数的所有值相加,并计算总和中涉及的行数。 现在,在我的程序中,我有一些逻辑,只有当结果计数低于4时,才会评估该值。

我想优化查询,以便在count超过4时获得空结果集。 我的第一个想法是在查询上打出另一个条件(其中numRows< 4),但这不起作用,因为numRows不是someTable中定义的列。 我的第二个想法是使查询成为子查询,然后通过子查询的表过滤结果,如下所示:

SELECT
 *
 FROM (
   SELECT
     COUNT(id) numRows, 
     SUM(value) totSum 
   FROM someTable
   WHERE foo= @bar
 ) subQuery
where subQuery.numRows < 4

我对此解决方案的主要问题是子查询是否将被完全计算,或者如果主要查询在numRows达到4时立即停止它。

1 个答案:

答案 0 :(得分:4)

您可以将其添加到原始查询中。绝对更容易阅读,可能(不确定)更好的表现。

HAVING COUNT(ID) < 4