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调用,并获取块中任何单个调用的结果。一旦我有了一个结果块,就可以快速而简单地确定行数,这是在关于返回数据对象的元数据中。我回答了您提出的问题,并提供了一个可能更适合您的替代方案。如果您确信您的想法是最好的,那么为什么不进行更改和测试呢?尤其要确保测试返回太多结果的场景。别忘了检查在其他情况下有多少改进。