Saya akan mencoba menulis ulang CTE untuk menghapus salah satu langkah yaitu
;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);
Jika hanya ada satu elemen root, akan lebih baik untuk meneruskannya ke dalam kueri sebagai variabel sehingga nilainya dapat digunakan oleh pengoptimal kueri.
Hal lain yang harus dicoba adalah mengubah kueri untuk mendapatkan elemen root tanpa subkueri yaitu second_num is null atau first_num =second_num.