哪些类型的 TSQL 选择语句(即从 开始的语句select
)从编译中受益,提供了哪些优势?通过编译,我的意思是在存储过程中托管 select 语句。
我知道存储过程的性能优势(加密、关注点分离等)之外的其他优势,但我只对这里的性能方面感兴趣。
这是一个例子:
select t1.f1, t2.f2 from t1 inner join t2 on t1.pk = t2.fk
当将上述 sql 视为存储过程而不是命令文本时,它会/会运行得更快吗?
哪些类型的 TSQL 选择语句(即从 开始的语句select
)从编译中受益,提供了哪些优势?通过编译,我的意思是在存储过程中托管 select 语句。
我知道存储过程的性能优势(加密、关注点分离等)之外的其他优势,但我只对这里的性能方面感兴趣。
这是一个例子:
select t1.f1, t2.f2 from t1 inner join t2 on t1.pk = t2.fk
当将上述 sql 视为存储过程而不是命令文本时,它会/会运行得更快吗?
不,SQL Server 会根据语句级别的查询文本优化和缓存查询计划,因此一般来说,无论是否在存储过程中,该语句都会进行相同的优化。
现在,还有其他因素会影响该语句的缓存和优化方式,以及存储过程如何表现出与存储过程之外的相同查询不同的性能特征(并使用不同的计划)。例如:SET 设置。这超出了您的核心问题的范围,但是 Erland 的文章,应用程序慢,SSMS 快?理解性能之谜是一本奇妙而有启发性的读物。