sql-server – 如果在查询中定义了CTE并且从未使用它,它是否发出声音?

前端之家收集整理的这篇文章主要介绍了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 );

查询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;

查询计划:

有一个开销,但查询的不必要部分很早就消除了(在这种情况下解析期间;在更复杂的情况下的简化阶段),因此额外的工作真的是最小的,并且不会导致潜在的昂贵的基于成本的优化.

猜你在找的MsSQL相关文章