Бих опитал да пренапиша CTE, за да премахна една от стъпките, т.е.
;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);
Ако има само един основен елемент, би било по-добре това да се прехвърли в заявката като променлива, така че стойността да може да се използва от оптимизатора на заявките.
Друго нещо, което трябва да опитате, е да промените заявката, за да получите основните елементи без подзаявка, т.е. second_num е null или first_num =second_num.