Jeg ville prøve at omskrive CTE for at fjerne et af trinene, dvs.
;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);
Hvis der kun er ét rodelement, ville det være bedre at overføre dette til forespørgslen som en variabel, så værdien kan bruges af forespørgselsoptimeringsværktøjet.
En anden ting at prøve er at ændre forespørgslen for at få rodelementerne uden en underforespørgsel, dvs. second_num er null eller first_num =second_num.