sql >> Base de Datos >  >> RDS >> Sqlserver

¿Por qué CTE (recursivo) no está paralelizado (MAXDOP=8)?

Intentaría reescribir el CTE para eliminar uno de los pasos, es decir,

;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);

Si solo hay un elemento raíz, sería mejor pasarlo a la consulta como una variable para que el optimizador de consultas pueda usar el valor.

Otra cosa que puede intentar es cambiar la consulta para obtener los elementos raíz sin una subconsulta, es decir, second_num es nulo o first_num =second_num.