加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:15:14 所属栏目:MsSql教程 来源:网络整理
导读:查询中未使用的CTE是否会影响性能和/或更改生成的查询计划? 解决方法 它们似乎没有,但这实际上只适用于嵌套的CTE. 创建两个临时表: CREATE TABLE #t1 (id INT);INSERT #t1 ( id )VALUES ( 1 );CREATE TABLE #t2 (id INT);INSERT #t2 ( id )VALUES ( 1 ); 查
查询中未使用的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;

查询计划:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读