【发布时间】:2014-11-13 19:16:50
【问题描述】:
我正在更新一些首先运行查询的代码(我没有编写),例如
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 或更高版本。这张桌子相当大。
【问题讨论】:
-
yes count(*) 将比选择特定列更快
-
@RADAR 我认为
COUNT(Person._pk)将提高性能,因为它在单列上 -
不,@Ganesh_Devlekar,你应该无法比
COUNT(*)更有效地计数,因为COUNT(*)不必查看任何列。 -
很多关于 COUNT([Column]) 与 COUNT(*) 差异的有用讨论可以在 here 找到
标签: sql-server performance sql-server-2008 count