如果不使用 CTE 表达式,SQL Server 是否会执行它?

Pat*_*urg 1 sql-server

我正在尝试调试执行缓慢的查询。它有几种with表达方式,分别是left joined. 当我删除连接时,速度会大大加快。

原始查询:

;with CTE as
(
    Select * 
    from table1
)  
SELECT * 
FROM table2
LEFT JOIN CTE ON table2.CTEID
Run Code Online (Sandbox Code Playgroud)

更好的查询性能:

;with CTE as
(
     Select * 
     from table1
) 
SELECT * 
FROM table2
Run Code Online (Sandbox Code Playgroud)

上面是因为没有加入所以不执行CTE,还是不管怎样都执行?

Tim*_*Tim 5

我的猜测可能不是——查询优化器非常聪明,不会执行不必​​要的东西。每个查询都是不同的,查询优化器使用有关实际数据的统计信息来决定如何评估它,因此唯一确定的方法是让 SQL Server 告诉您它如何评估您的查询。

为此,请在 SQL Server Management Studio 中使用“包括实际执行计划”执行查询,您将清楚地看到它如何评估查询。