不久前,Brent Ozar发表了一篇文章,详细介绍了SQL Server和PostgreSQL之间的一些区别:
SQL Server与PostgreSQL之间的两个重要区别
第一点(“ CTE是优化栅栏”)引起了我的注意,因为很明显,在所提供的示例中,SQL Server将CTE和主查询组合在一起,并将其优化为单个查询(与之相反的行为是, PostgreSQL)。
但是,此行为似乎与我在其他博客和培训课程中看到的示例相反,在这些示例中,SQL Server确实将CTE视为优化围栏,从而可以更好地使用索引,提高性能等。例如:
因此,似乎SQL Server有时会“荣誉” CTE作为优化的围栏。是否有可用的良好资源来记录已知情况的特定列表,在这些情况下,SQL Server将可靠地认可CTE作为优化范围(或相反的行为)?