使用SQL Server

时间:2015-05-17 23:54:00

标签: sql-server performance columnstore

在加入列存储索引表时,有没有办法说服SQL Server 2014进行连接消除?

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

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

但是,我们希望将事实表转换为列存储,因为它们对通常在数据集上执行的聚合查询的类型有很大的性能改进。但是如果我们这样做,我们就失去了定义外键的能力,因为它们不受列存储的支持。反过来,这会阻止计划者进行连接消除,使得方便视图在许多情况下会进行大量不必要的连接。

有没有办法说服规划人员在不使用外键的情况下进行连接消除?

1 个答案:

答案 0 :(得分:1)

根据我对SQL Server 2014的了解,这是不可能的。您可以使用SQL Server 2016 Clustered Columnstore和外键轻松获取它... :) 在一些最新的SQL Server 2014 RTM& amp; Cum积累更新中。 SP1分支,有一个有趣的错误修复,可以提高一些性能,但我确实理解它并不是你想要的: Query plan generation improvement for some columnstore queries in SQL Server 2014 or 2016