CTE を書き直して、ステップの 1 つを削除してみます。
;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);
プレ>ルート要素が 1 つしかない場合は、これを変数としてクエリに渡して、値をクエリ オプティマイザーで使用できるようにすることをお勧めします。
もう 1 つの試みは、サブクエリなしでルート要素を取得するようにクエリを変更することです。つまり、second_num が null または first_num =second_num です。