在这个出色的SO问题中,讨论了CTE
和之间的sub-queries
差异。
我想特别问一下:
在以下哪种情况下,以下各项中的每一种都更有效/更快?
- CTE
- 子查询
- 临时表
- 表变量
传统上,我使用了大量的temp tables
开发工具stored procedures
-因为它们似乎比许多相互交织的子查询更具可读性。
Non-recursive CTE
可以很好地封装数据集,并且可读性很强,但是在特定情况下有人可以说它们将始终表现更好吗?还是总是必须摆弄各种选项以找到最有效的解决方案?
编辑
最近有人告诉我,就效率而言,临时表是一个不错的首选,因为它们具有关联的直方图,即统计信息。