SQL Server中存储过程的执行计划管理与优化
1. 多语句表值函数与临时表的使用注意
多语句表值函数(multistatement TVFs)返回的是表变量。与临时表不同,SQL Server 不会为表变量维护直方图。这导致在优化器对表变量进行基数估计时,可用的工具受限,可能会做出次优选择,无论是函数体内针对表变量的查询,还是针对表函数的外部查询。若发现性能问题与缺乏直方图有关,就需要重新评估解决方案。
另一个选择是使用带有临时表的存储过程。不过,与查询表函数的结果相比,与存储过程的结果进行交互不太方便。需要明确优先级并进行测试,以确定是否存在性能差异以及差异的大小。
2. 存储过程的优势
存储过程是一种重要的编程工具,与即席代码相比,具有以下好处:
- 可重用性与复杂性隐藏 :将逻辑封装在例程中,便于重用并隐藏复杂性。
- 部署简便 :部署存储过程的更改比部署应用程序的更改简单得多。只需使用 ALTER PROC 命令,所有人就能立即使用更改后的版本。
- 减少网络流量 :通过网络仅传递过程名称和输入参数,逻辑在数据库引擎中执行,仅将最终结果传输回调用方,减少了应用程序与数据库之间的往返次数。
- 促进计划缓存和重用 :存储过程中使用参数化查询有助于高效的计划缓存和重用。不过,使用 sp_executesql 执行参数化查询也能获得类似的好处。
超级会员免费看
订阅专栏 解锁全文
1063

被折叠的 条评论
为什么被折叠?



