指定条件时CTE永不停止执行

时间:2019-06-06 11:52:17

标签: sql sql-server sql-server-2012

我面临着一个棘手的问题,当我们在select子句中指定过滤条件时,通用表提取需要很长时间才能完成,或者显然没有结束。 但是,如果未指定任何条件,它可以正常运行或在几秒钟内完成

这是我的查询

WITH cte AS (
    SELECT [Title] ,[WI_ID] ,[TeamName] ,[KeyedInID],WorkItemType ,0 as Level
    FROM tbl_VSTS_AllWorkItems 
    WHERE Parent IS NULL and state<>'Removed'
    UNION ALL 
    SELECT t1.[Title] ,t1.[WI_ID] ,t1.[TeamName],t2.[KeyedInID] ,t1.WorkItemType,t2.Level+1
    FROM tbl_VSTS_AllWorkItems t1
    INNER JOIN cte t2
        ON t1.Parent = t2.WI_ID where t1.state<>'Removed'
)
select * from cte

因此,正如您所看到的,我指定的选择没有任何条件在10-25秒内执行。但是当我们遇到

select * from cte where [KeyedInID] is not null 

需要很长时间才能完成,或者就像一个永无止境的过程。

但是也有奇怪的部分。我创建了一个表变量,并像这样使用相同的CTE填充该表

insert into @myTable
select * from cte

那我做的是

select * from @myTable where [KeyedinId] is not null

它仅需几秒钟即可执行所有操作。但是在我编写整个问题时,仍然没有执行第一个没有表的查询。

我真的真的不知道发生了什么

0 个答案:

没有答案