SQL Server 2008 编译的 TSQL 性能

use*_*042 2 t-sql compiled sql-server-2008

哪些类型的 TSQL select 语句(即从 开始的语句select)可以从编译中受益?其优点是什么?我所说的编译是指在存储过程中托管 select 语句。

我知道存储过程除了性能优势(加密、关注点分离等)之外,但我只对这里的性能方面感兴趣。

这是一个例子:

select t1.f1, t2.f2 from t1 inner join t2 on t1.pk = t2.fk
Run Code Online (Sandbox Code Playgroud)

当上面的sql被分解为存储过程而不是命令文本时,它会运行得更快吗?

Aar*_*and 5

不会,SQL Server 根据语句级别的查询文本来优化和缓存查询计划,因此通常情况下,无论是否在存储过程中,该语句都会进行相同的优化。

现在,还有其他因素可能会影响该语句的缓存和优化方式,以及存储过程如何表现出与存储过程之外的相同查询不同的性能特征(并使用不同的计划)。例如:SET 设置。这超出了您的核心问题的范围,但是 Erland 的文章“应用程序缓慢,SSMS 快速?” 《理解性能之谜》是一本精彩而富有启发性的读物。