我有相同的查询,当作为选择语句运行时显示为以批处理模式运行,但当相同查询是 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
.强制查询使用 0 克服了这个问题,因为列存储需要 DOP >= 2
因此添加以下提示启用批处理模式
我不明白为什么会这样——我的理解是 CTAS 和构建新的列存储应该始终并行,但这解决了问题。
编辑:这似乎是默认设置,因为它旨在获得最佳的最佳列存储质量。因此,您必须在读取性能和索引质量之间做出选择,或者使用中间存储,每个查询都有不同的 maxdop 提示。