2

在加入列存储索引表时,有什么方法可以说服 SQL Server 2014 进行联接消除?

我们有一个标准的维度模型,带有事实表和维度,并且为了方便用户,还有一些视图将事实与它们的多个维度结合起来。

当使用传统的行存储表时,我们可以利用 SQL 的能力来消除那些方便视图中的连接,如果它们对于给定的查询不是必需的,因为事实和事实之间定义了 FK/PK 关系。允许查询计划器确定连接不会添加或删除行的维度。

但是,我们希望将事实表转换为列存储,因为它们对于通常在数据集市上完成的聚合查询类型具有巨大的性能改进。但是如果这样做,我们将失去定义外键的能力,因为列存储不支持它们。反过来,这会阻止规划器进行联接消除,从而使便利视图在许多情况下进行大量不必要的联接。

有没有办法说服计划者在不使用外键的情况下进行加入消除?

4

1 回答 1

2

据我所知,SQL Server 2014 这是不可能的。您可以使用 SQL Server 2016 Clustered Columnstore 和外键轻松获得它...... :) 在 SQL Server 2014 RTM & SP1 分支的一些最新累积更新中,有一个有趣的错误修复可以提高一些性能,但我确实这样做了了解这不是您正在寻找的内容: SQL Server 2014 或 2016 中某些列存储查询的查询计划生成改进

于 2016-07-27T00:10:43.297 回答