Sql-Server

如果 CTE 在查詢中定義並且從未使用過,它會發出聲音嗎?

  • December 3, 2021

查詢中未使用的 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;

查詢計劃:

堅果

有成本,但查詢的不必要部分很早就被消除了(在這種情況下是在解析期間;在更複雜的情況下是簡化階段),因此額外的工作確實是最小的,並且不會導致潛在的昂貴的基於成本的優化。

引用自:https://dba.stackexchange.com/questions/209695