Questions tagged «batch-mode»

1
SQL Server 2014可以在批处理模式下执行什么操作?
在查询中使用列存储索引时,SQL Server可以使用批处理模式。关于可以在批处理模式下运行什么以及不能在批处理模式下运行的文档很少。请查看以下(激励性)查询计划,其中以批处理模式(绿色)执行大量操作: (这是一个估计的计划。我使用实际计划来验证实际执行模式确实是批处理的。) 请注意,只有T1的构建方使用列存储索引。所有探针输入(T2和T3)都是行存储。他们的数据似乎转换为批处理模式。我一直认为批处理模式仅用于通过探针侧运行的数据流。 似乎数据可以转换为批处理模式,即使它不是源自于列存储索引。这就提出了一个问题:为什么SQL Server也不将批处理模式也用于仅行存储的查询?对于其中一些人可能是有益的。使用列存储索引是否是使SQL Server考虑批处理模式所必需的正式要求?我们是否可以添加一个带有列存储索引的零行伪表来引入批处理模式并实现性能提升? 自SQL Server 2014起,批处理模式下到底可以运行什么?

1
如何在UNPIVOT(循环连接)中使用批处理模式?
我有以下形式的查询: SELECT ... FROM ColumnstoreTable cs CROSS APPLY ( SELECT * FROM (VALUES ('A', cs.DataA) , ('B', cs.DataB) , ('C', cs.DataC) ) x(Col0, Col1) ) someValues 这将从Columnstore支持的子查询(ColumnstoreTable)中获取每一行,并将这些行相乘。这本质上是一个UNPIVOT。实际查询大于此。查询的这一部分将用于其他处理。 这里的问题是将其CROSS APPLY实现为循环连接,这是一个合理的选择。不幸的是,循环连接不支持批处理模式。 查询的这一部分对性能非常重要,我怀疑以批处理模式运行它可能对性能非常有益。 如何重写此查询,以便不退出批处理模式? 我确实尝试使用临时表代替VALUES,但这并没有改变没有哈希连接的相等连接条件的事实。

1
为什么批处理模式窗口合计会产生算术溢出?
以下查询在具有SUM的列存储表上执行带窗口的窗口1500 total rows,每个表的值均为0或1,并且溢出INT数据类型。为什么会这样呢? SELECT a, p, s, v, m, n, SUM(CASE WHEN n IS NULL THEN 0 ELSE 1 END) OVER (PARTITION BY s, v, a ORDER BY p) AS lastNonNullPartition FROM ( SELECT a, p, s, v, m, n, RANK() OVER (PARTITION BY v, s, a, p ORDER BY …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.