sql >> Database >  >> RDS >> Sqlserver

Waarom is CTE (recursief) niet geparalleliseerd (MAXDOP=8)?

Ik zou proberen de CTE te herschrijven om een ​​van de stappen te verwijderen, d.w.z.

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

Als er maar één root-element is, is het beter om dit als variabele in de query door te geven, zodat de waarde kan worden gebruikt door de query-optimizer.

Een ander ding om te proberen is de query te wijzigen om de root-elementen te krijgen zonder een subquery, d.w.z. second_num is null of first_num =second_num.



  1. Mysql-berekening in select-statement

  2. Laden van dll-bestand in eclipse java-project

  3. Oracle Pivot-query geeft kolommen met aanhalingstekens rond de kolomnamen. Wat?

  4. Hoe voorkom ik dat een MySQL-decimaalveld wordt afgerond?