Ove*_*ack 20 foreign-key data-warehouse sql-server columnstore sql-server-2014
我正在使用索引对数据仓库进行性能调整。我对 SQL Server 2014 还是很陌生。Microsoft 描述了以下内容:
“我们将聚集列存储索引视为存储大型数据仓库事实表的标准,并预计它将用于大多数数据仓库场景。由于聚集列存储索引是可更新的,您的工作负载可以执行大量的插入、更新、和删除操作。” http://msdn.microsoft.com/en-us/library/gg492088.aspx
但是,如果您进一步阅读文档,您会发现限制和限制:
“不能有唯一约束、主键约束或外键约束。”
这让我很困惑!出于各种原因(数据完整性、语义层可见的关系......)
所以微软提倡数据仓库场景使用聚集列存储索引;但是,它不能处理外键关系?!
我在这方面正确吗?您会建议哪些其他方法?过去,我在数据仓库场景中使用了非聚集列存储索引,对数据加载进行删除和重建。然而,SQL Server 2014 并没有为数据仓库增加真正的新价值??
Bre*_*zar 16
你在这里有很多问题:
问:(缺少外键)让我很困惑!出于各种原因(数据完整性、语义层可见的关系……)
A:正确,在数据仓库中使用外键通常是一个好习惯。但是,聚集列存储索引尚不支持。
Q:所以MS提倡DWH场景使用Clustered Column存储索引,但是不能处理FK关系?!
答:Microsoft 为您提供工具。如何使用这些工具取决于您。
如果您面临的最大挑战是数据仓库中缺乏数据完整性,那么您需要的工具是带有外键的常规表。
如果您最大的挑战是查询性能,并且您愿意在加载过程中检查自己的数据完整性,那么您需要的工具是聚集列存储索引。
问:然而 SQL 2014 并没有为 DWH 增加真正的新价值??
答:幸运的是,聚集列存储并不是 SQL Server 2014 中唯一的新功能。例如,查看新的基数估计器。
问:为什么我对我最喜欢的功能的实现方式如此愤怒和痛苦?
A:你抓住了我——你并没有真正问那个问题——但我还是会回答。欢迎来到第三方软件的世界,在这里并非所有东西都是根据您的确切规格构建的。如果您对希望在 Microsoft 产品中看到的更改充满热情,请查看Connect.Microsoft.com。在他们的反馈过程中,您可以提交更改,其他人可以对其进行投票,然后产品团队会阅读并告诉您为什么他们不会实施它。有时。大多数情况下,他们只是将其标记为“无法修复,可在我的机器上运行”,但是,嘿,有时您确实会得到一些答案。
我能理解你觉得有些你习惯的东西不见了。但这只是因为他们失踪了。
尽管如此,当外键只是一个概念(当时我们通过触发器实现)而不是诸如约束之类的物理实现时,SQL Server 已被成功使用。声明性引用完整性至少在 SQL Server 7.0 中存在,但比当前的实现要弱得多。
关于聚集列存储索引的值,它确实提供了一个索引并且行是可更新的。您可能会发现此讨论很有价值:http : //sqlwithmanoj.com/2014/07/24/maintaining-uniqueness-with-clustered-columnstore-index-sql-server-2014/
Manoj 指出,有一种方法可以在此表的顶部创建索引/物化视图,以集群键作为 PK(表/视图的第一列)。当然,这是否适合您是您必须做出的决定。
但是,正如 Aaron Bertrand 和 TomTom 评论的那样,这完全是为了更好的性能。如果您可以管理与您有关的其他问题(并且我相信它们是可以管理的),那么您将获得很多好处。因此,将 ColumnStore 用于能够执行的操作并自行管理缺失的功能。