Columnstore

select 以批處理模式執行,但 CTAS 以行模式執行

  • March 5, 2018

當作為選擇語句執行時,我有相同的查詢,顯示為在批處理模式下執行,但是當相同的查詢是 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       

對查詢執行解釋顯示下面的內容設置MAXDOP1.

強制查詢使用 0 克服了這個問題,因為列儲存需要 DOP >= 2

因此添加以下提示啟用批處理模式

   OPTION (MAXDOP 0)   

我不明白為什麼會發生這種情況 - 我的理解是 CTAS 和建構新的列儲存應該始終並行,但這解決了問題。

編輯:這似乎是預設設置,因為它旨在獲得最佳的列儲存質量。因此,您必須在讀取性能和索引質量之間做出選擇,或者使用中間儲存,每個查詢都有不同的 maxdop 提示。

引用自:https://dba.stackexchange.com/questions/198359