Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tại sao CTE (đệ quy) không được song song hóa (MAXDOP =8)?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để buộc khung thực thể chèn các cột nhận dạng?

  2. Làm cách nào để kết nối ứng dụng Android với SQL Server thông qua jbdc?

  3. Tìm chỉ mục của lần xuất hiện cuối cùng của một chuỗi con bằng T-SQL

  4. Máy chủ SQL SHOWPLAN_ALL

  5. T-SQL Cast so với Convert