sql >> Database teknologi >  >> RDS >> Sqlserver

Hvorfor er CTE (rekursiv) ikke paralleliseret (MAXDOP=8)?

Jeg ville prøve at omskrive CTE for at fjerne et af trinene, dvs.

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

Hvis der kun er ét rodelement, ville det være bedre at overføre dette til forespørgslen som en variabel, så værdien kan bruges af forespørgselsoptimeringsværktøjet.

En anden ting at prøve er at ændre forespørgslen for at få rodelementerne uden en underforespørgsel, dvs. second_num er null eller first_num =second_num.



  1. ACL-fejl ved forsøg på at sende mail via Oracle UTL_SMTP

  2. TSQL - En joinforbindelse ved hjælp af fuldtekst INDEHOLDER

  3. Hvordan Pi() virker i PostgreSQL

  4. MySQL REGEXP ordgrænser [[:<:]] [[:>:]] og dobbelte anførselstegn