使用where子句与select的count的SQL性能

时间:2014-11-13 19:16:51

标签: sql-server performance sql-server-2008 count

我正在更新一些首先运行查询的代码(我没写过),例如

SELECT COUNT(*) 
  FROM dbo.APP_Person as Person
 WHERE Person._pk > 0 
   AND Person.last_name LIKE 'LName%' 
   AND Person.first_name LIKE 'FName%' 
   AND Person._pk IN (SELECT _pk FROM dbo.APP_PersonView )

如果结果计数不是太大,它稍后会运行相同的查询,但使用SELECT Person._pk代替SELECT COUNT(*)。否则,系统会告诉用户优化选择集,然后重试。

(要检查的字段和要比较的值来自用户输入。)

是否有充分的理由不简单地运行第二个表单并查看结果的大小,所以我不需要运行查询两次? SELECT COUNT(*)会比SELECT Person._pk(主键)快得多吗?

这将在SQLserver 2005或更高版本(可能是2008或更高版本)下运行。桌子相当大。

1 个答案:

答案 0 :(得分:0)

是的,有一个很好的理由不简单地运行第二个表单并查看结果的大小:如果不扫描整个结果集,就不能得到结果的大小

您可以将结果处理为好像没有足够的数据,直到证明太多,但如果处理成本高,那么这不一定是更好的选择。除非事实证明这是您系统的瓶颈,否则您可能有更好的事情要做,而不是尝试改进它。