sql >> データベース >  >> RDS >> Sqlserver

CTE (再帰) が並列化されない (MAXDOP=8) のはなぜですか?

    CTE を書き直して、ステップの 1 つを削除してみます。

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

    ルート要素が 1 つしかない場合は、これを変数としてクエリに渡して、値をクエリ オプティマイザーで使用できるようにすることをお勧めします。

    もう 1 つの試みは、サブクエリなしでルート要素を取得するようにクエリを変更することです。つまり、second_num が null または first_num =second_num です。



    1. DATAINFILEとLOADDATALOCALINFILEの違い

    2. GROUPBYを使用してFIELDで注文する方法

    3. C#のストアドプロシージャから戻り値を取得する

    4. >>準備されたクエリ<<をODP(Oracle.DataAccess)で使用して、CLOBフィールドのデータを更新するにはどうすればよいですか?