Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 带where子句的count与select的SQL性能_Sql Server_Performance_Sql Server 2008_Count - Fatal编程技术网

Sql server 带where子句的count与select的SQL性能

Sql server 带where子句的count与select的SQL性能,sql-server,performance,sql-server-2008,count,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 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.\u pk代替SELECT count*。否则,用户将被告知优化选择集并重试

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

有没有理由不直接运行第二个表单并查看结果的大小,这样我就不需要运行两次查询了?SELECT COUNT*是否会比SELECT Person快那么多。\u pk主键


这将在SQLServer2005或更高版本下运行,可能是2008或更高版本。表相当大。

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


你可以把结果当作足够少的结果来处理,直到证明结果太多为止,但是如果处理过程很昂贵,那么这不一定是一个更好的选择。除非这已被证明是您系统的瓶颈,否则您可能有更好的事情要做,而不是尝试改进它。

yes count*将比选择特定的column@RADAR我认为COUNTPerson._pk将提高性能,因为它是在单栏上进行的。@Ganesh_Devlekar,您不应该比count*更有效地计数,因为count*不必查看任何列。关于count[Column]与count*的差异,可以找到很多有用的讨论,谢谢。此项是一个瓶颈,正在降低用户速度。请注意,应用程序不是用SQL编写的,它向SQLserver发送独立的SQL调用,并获取块中任何单个调用的结果。一旦我有了一个结果块,就可以快速而简单地确定行数,这是在关于返回数据对象的元数据中。我回答了您提出的问题,并提供了一个可能更适合您的替代方案。如果您确信您的想法是最好的,那么为什么不进行更改和测试呢?尤其要确保测试返回太多结果的场景。别忘了检查在其他情况下有多少改进。