Sql-Server
如果 CTE 在查詢中定義並且從未使用過,它會發出聲音嗎?
查詢中未使用的 CTE 是否會影響性能和/或更改生成的查詢計劃?
他們似乎沒有這樣做,但這實際上只適用於嵌套 CTE。
創建兩個臨時表:
CREATE TABLE #t1 (id INT); INSERT #t1 ( id ) VALUES ( 1 ); CREATE TABLE #t2 (id INT); INSERT #t2 ( id ) VALUES ( 1 );
查詢一:
WITH your_mom AS ( SELECT TOP 1 * FROM #t1 AS t ), also_your_mom AS ( SELECT TOP 1 * FROM #t2 AS t ) SELECT * FROM your_mom;
查詢 2:
WITH your_mom AS ( SELECT TOP 1 * FROM #t1 AS t ), also_your_mom AS ( SELECT TOP 1 * FROM #t2 AS t ) SELECT * FROM also_your_mom;
查詢計劃:
有成本,但查詢的不必要部分很早就被消除了(在這種情況下是在解析期間;在更複雜的情況下是簡化階段),因此額外的工作確實是最小的,並且不會導致潛在的昂貴的基於成本的優化。