sql-server – SQL Server 2014在批处理模式下可以执行什么操作
在查询中使用列存储索引时,SQL Server可以使用批处理模式.关于什么可以在批处理模式下运行,哪些不可以运行的文档很薄.请查看以下(激励)查询计划,其中批量模式(绿色)执行了大量令人惊讶的事情:
(这是一个估计的计划.我使用实际计划来验证实际执行模式确实是批处理.) 请注意,只有T1的构建端使用列存储索引.所有探头输入(T2和T3)都是行存储.他们的数据似乎转变为批处理模式.我一直认为批处理模式仅用于通过探测端运行的数据流. 似乎数据可以转换为批处理模式,即使它不是源自列存储索引.这提出了一个问题:为什么SQL Server也不使用批处理模式进行仅限行存查询?对他们中的一些人可能有益.使用列存储索引是使SQL Server考虑批处理模式所必需的正式要求吗?我们可以添加一个带有列存储索引的零行虚拟表来引导批处理模式并实现性能提升吗? 从SQL Server 2014开始,在批处理模式下究竟能运行什么? 解决方法
SQL Server 2014将以下内容添加到批处理模式运算符的原始列表中: >哈希外连接(包括完全连接)
SQL Server 2012在使用批处理运算符方面非常有限.批处理模式计划具有固定的形状,依赖于启发式方法,并且一旦转换为行模式处理,就无法重新启动批处理模式. SQL Server 2014将执行模式(批处理或行)添加到查询优化器的常规属性框架,这意味着它可以考虑在计划中的任何位置转换为批处理模式.转换由计划中的不可见执行模式适配器实现.这些适配器具有与它们相关联的成本,以限制在优化期间引入的转换的数量.这种新的灵活模型称为混合模式执行. 执行模式适配器可以在优化器的输出中看到(虽然很遗憾不在用户可见的执行计划中),带有未记录的TF 8607.例如,对于计算行存储中的行的查询捕获了以下内容:
今天是的,是的.这种限制的一个可能原因是它自然地将批处理模式处理限制为Enterprise Edition.
是的,这很有效.出于这个原因,我还看到人们使用单行聚簇列存储索引进行交叉连接.您在评论中提出的建议是加入虚假列存储表的假是非常好的. -- Demo the technique (no performance advantage in this case) -- -- Row mode everywhere SELECT COUNT_BIG(*) FROM dbo.FactOnlineSales AS FOS; GO -- Dummy columnstore table CREATE TABLE dbo.Dummy (c1 int NULL); CREATE CLUSTERED COLUMNSTORE INDEX c ON dbo.Dummy; GO -- Batch mode for the partial aggregate SELECT COUNT_BIG(*) FROM dbo.FactOnlineSales AS FOS LEFT OUTER JOIN dbo.Dummy AS D ON 0 = 1; 使用虚拟左外连接计划:
真正. 最好的官方信息来源是Columnstore Indexes Described和SQL Server Columnstore Performance Tuning. SQL Server MVP Niko Neugebauer在here一般的列存储上有一个非常棒的系列. 虽然这不是官方产品文档,但有关Microsoft研究论文Enhancements to SQL Server Column Stores(pdf)中2014年更改的一些很好的技术细节. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – 为什么我需要两个SQL Server Service Broker
- sqlserver 设置数据库恢复模式
- 探讨select in 在postgresql的效率问题
- 在SAS中删除表
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC UP
- 数据窗口key Modification与sqlserver触发器for update 配合
- sql-server – 触发更新另一个sql server上的数据
- SQLServer 数据库镜像+复制切换方案
- SQLSERVER2000 用过程来模拟MDX分析报表的效果(2)
- sql-server – 从DMV中,你能判断一个连接是否使用了Applica