Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengapa CTE (rekursif) tidak diparalelkan (MAXDOP=8)?

Saya akan mencoba menulis ulang CTE untuk menghapus salah satu langkah yaitu

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

Jika hanya ada satu elemen root, akan lebih baik untuk meneruskannya ke dalam kueri sebagai variabel sehingga nilainya dapat digunakan oleh pengoptimal kueri.

Hal lain yang harus dicoba adalah mengubah kueri untuk mendapatkan elemen root tanpa subkueri yaitu second_num is null atau 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. Mendapatkan Elemen ke-n dari yang terakhir dalam xml di Sql Server

  2. Apakah nilai pengembalian 0 selalu berhasil dalam prosedur tersimpan?

  3. Jumlah Inti Kerangka Entitas tidak memiliki kinerja yang optimal

  4. bagaimana cara menulis kueri SQL untuk hasil ini?

  5. menggunakan pyodbc di linux untuk memasukkan karakter unicode atau utf-8 di bidang nvarchar mssql