Performance 为什么sql prepare语句类型中的计数(*)非常小?

Performance 为什么sql prepare语句类型中的计数(*)非常小?,performance,sql-server-2005,sql-tuning,Performance,Sql Server 2005,Sql Tuning,我发现与从表中选择计数相比,结束计数要快得多 e、 g 使用count*结束 以CTE为例 从表1中选择A列、B列、totalNumber=count*over,条件如下。。 从CTE中选择totalNumber 使用select count*from或使用count1 从表1中选择计数*,其中条件。。 在我在SQL Server 2K5上进行的本地测试中,如果搜索条件复杂且返回的行较大,则*上的计数将快4倍 但为什么计数**的执行速度如此之快 谢谢你 万斯 更新 我想我真的错过了一些细

我发现与从表中选择计数相比,结束计数要快得多

e、 g

使用count*结束

以CTE为例 从表1中选择A列、B列、totalNumber=count*over,条件如下。。 从CTE中选择totalNumber

使用select count*from或使用count1

从表1中选择计数*,其中条件。。

在我在SQL Server 2K5上进行的本地测试中,如果搜索条件复杂且返回的行较大,则*上的计数将快4倍

但为什么计数**的执行速度如此之快

谢谢你

万斯

更新

我想我真的错过了一些细节:

实际上,我在测试中使用了prepare语句sql,如下所示:

exec sp_executesql N'选择计数* 从表A到aaain@P0 和bbb类似于@P1', N'@P0 nvarchar4000,@P1 nvarchar4000',N'XXXXXXX-XXXX-XXX',N'%AAA%'

执行计划显示HashMatch成本为61%,其他为索引查找。执行时间为1484ms,逻辑读取约为4000。

相比之下,这是缓慢的

选择计数* 表A中aaa位于“XXXXXXXX-XXXX-XXX”中 和bbb,如“%AAA%” 执行计划称聚集索引搜索成本为98%。执行时间为46ms,逻辑读取为8000。

如果将第一个sql更改为:

exec sp_executesql N',CTE为 选择总计=计数*结束 从表A到aaain@P0 和bbb一样@P1从cte'中选择前1名, N'@P0 nvarchar4000,@P1 nvarchar4000',N'XXXXXXX-XXXX-XXX',N'%AAA%' 执行计划显示聚集索引查找58%,未发生hashmatch联接

执行时间为15ms,逻辑读取为:8404。


那么,hash match join对性能有很大的开销吗?

执行计划是怎么说的?我想可能是因为我在测试中使用了exec sp_executesql@sql not select语句。其中的@sql类型为prepare语句sql。更新问题以澄清更多细节。