Tôi sẽ thử viết lại CTE để loại bỏ một trong các bước, tức là
;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);
Nếu chỉ có một phần tử gốc, tốt hơn nên chuyển phần tử này vào truy vấn dưới dạng một biến để giá trị có thể được sử dụng bởi trình tối ưu hóa truy vấn.
Một điều khác cần thử là thay đổi truy vấn để lấy các phần tử gốc mà không có truy vấn con, tức là second_num là null hoặc first_num =second_num.