Я сталкиваюсь с дикой проблемой, когда извлечение 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
Он выполнил все за считанные секунды. Но первый запрос без таблицы все еще выполняется, пока я пишу весь этот вопрос.
Я действительно не понимаю, что происходит