Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо CTE (рекурсивен) не е паралелен (MAXDOP=8)?

Бих опитал да пренапиша CTE, за да премахна една от стъпките, т.е.

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

Ако има само един основен елемент, би било по-добре това да се прехвърли в заявката като променлива, така че стойността да може да се използва от оптимизатора на заявките.

Друго нещо, което трябва да опитате, е да промените заявката, за да получите основните елементи без подзаявка, т.е. second_num е null или first_num =second_num.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Сравняване на типове данни за изображения в SQL

  2. Възможно ли е да се добавят езици към sys.syslanguages ​​в SQL Server 2008?

  3. Как да форматирате числа в SQL Server

  4. Използвайте NEWID(), за да създадете уникална стойност в SQL Server

  5. Мога ли да получа името на всички таблици от базата данни на SQL Server в C# приложение?