Ik zou proberen de CTE te herschrijven om een van de stappen te verwijderen, d.w.z.
;cte as (
select a.first_num, a.second_num, a.first_num as first_key, 1 as sequence_count
from T_SEQ_FF a where not exists (select 1 from T_SEQ_FF b where a.first_num = b.second_num)
union all
select a.first_num, a.second_num, cte.first_key, cte.sequence_count + 1
from T_SEQ_FF a
inner join cte on a.first_num = cte.second_num
)
select *
from cte
option (maxrecursion 0);
Als er maar één root-element is, is het beter om dit als variabele in de query door te geven, zodat de waarde kan worden gebruikt door de query-optimizer.
Een ander ding om te proberen is de query te wijzigen om de root-elementen te krijgen zonder een subquery, d.w.z. second_num is null of first_num =second_num.