我正在寻找提高某些SQL性能的方法,当前CTE正在脚本中多次使用和引用。我会使用表变量来获得改进吗?(因为代码在函数内,所以不能使用临时表)。
您实际上必须进行性能测试-没有“是/否”答案。根据安迪·利文(Andy Living)上面链接到的文章,CTE只是查询或子查询的简写。
如果您在同一函数中两次或多次调用它,则填充表变量然后加入该表变量或从中选择表变量可能会获得更好的性能。但是,由于表变量在某处占据空间,并且没有索引/统计信息(表变量上任何已声明的主键除外),所以无法说出哪一个会更快。
他们都有成本和节省,这是最好的方法,这取决于他们获取的数据及其处理方式。我遇到过您的情况,并且在各种条件下测试了速度之后- 有些函数使用CTE,而另一些函数使用表变量。