我正在考虑提高某些SQL的性能,目前CTE在脚本中被多次使用和引用.我会使用表变量来改进吗?(不能使用临时表,因为代码在函数内).
你真的要进行性能测试 - 没有是/否答案.根据Andy Living上面链接的帖子,CTE只是查询或子查询的简写.
如果您在同一个函数中调用它两次或更多次,那么如果填充表变量然后加入/选择它,可能会获得更好的性能.但是,由于表变量在某处占用空间,并且没有索引/统计信息(除了表变量上的任何声明的主键),没有办法说哪个更快.
它们都有成本和节省,这是最好的方式取决于它们引入的数据以及它们使用它们做了什么.我一直在你的情况下,在各种条件下测试速度后 - 一些函数使用CTE,其他函数使用表变量.