我面临着一个棘手的问题,当我们在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
它仅需几秒钟即可执行所有操作。但是在我编写整个问题时,仍然没有执行第一个没有表的查询。
我真的真的不知道发生了什么