Selectステートメントとして実行するとバッチモードで実行されているように見える同じクエリがありますが、同じクエリがCTAS操作の選択部分である場合は行モードです。両方のテーブル(および結果のテーブル)はすべて分布が揃えられています。
どうしてこれなの?もちろん、可能であればバッチモードで実行したいと思います。
行モードの実行を引き起こします:
create table mytable1
with
(
distribution = hash(c1)
)
as
クエリ:
with filterData as
(
select
a
,b
,c
,d
,DateStamp
from [DW_reporting].[table1]
where num > 0
)
select
p.[DateStamp]
,p.[a1]
,p.b1
,p.c1
,p.d1
,e.a
,e.b
,case when e.d is not null then 1 else 0 end as Flag
from SOmeOtherTable p
left join filterData e on e.a = p.a1
and e.c = p.c1
and e.DateStamp < p.DateStamp
クエリでexplainを実行すると、その下にあるものがMAXDOP
を1
に設定していることがわかりました。
列ストアにはDOP> = 2が必要 のように、クエリに0を使用させることでこれを克服しました。
したがって、以下のヒントを追加すると、バッチモードが有効になります
OPTION (MAXDOP 0)
これが発生している理由がわかりません。CTASと新しい列ストアの構築は常に並行している必要があると理解していますが、これで問題は解決します。
編集:これは、最高の最適な列ストア品質を目指しているため、デフォルト設定のようです。したがって、読み取りパフォーマンスとインデックス品質のどちらかを選択するか、中間ストアを使用する必要があります。クエリごとに異なるmaxdopヒントがあります。