CTE никогда не прекращает выполнение при указании условия - PullRequest
0 голосов
/ 06 июня 2019

Я сталкиваюсь с дикой проблемой, когда извлечение Common Table занимает очень много времени или, по-видимому, не заканчивается, когда мы указали условие фильтрации в предложении 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

Он выполнил все за считанные секунды. Но первый запрос без таблицы все еще выполняется, пока я пишу весь этот вопрос.

Я действительно не понимаю, что происходит

...