我刚刚阅读了位于这里的SQL2016ColumnStore索引指南。我们将在SQL 2016数据库中包含一些相当大的表(数亿到数十亿行),用于OLTP和分析。
这些表将主要被查询两种方法之一: 1)用户将根据Where子句中的特定离散值检索相当小的结果集(例如,其中SubId = 'ABC');2)用户将根据日期/时间值范围检索较大的结果集(例如,在'2/1/2017‘和’2/5/2017‘之间的ReadTime )。
由于列存储索引更适合scenerio #2 (我认为),我正在考虑将聚集索引非列存储(例如在SubId上)用于scenerio #1,并为clustered #2创建非聚集列存储索引(例如ReadTime)。
但是,如果我在ReadTime上创建了一个列存储聚集索引,而在SubId上创建了一个非列存储索引,我不确定这是否比创建一个列存储聚集索引更好。
我不知道该怎么做这个决定。
发布于 2017-02-17 16:32:33
集群列存储索引主要用于数据仓库、OLAP或报表解决方案。它们不擅长WHERE x = y类型查询;它们擅长于WHERE x < 1 and x > 1000000类型查询,其中查询处理器可以在CCI上执行范围扫描。
假设您的工作量是OLTP的关键,我建议,在不需要大量工作的情况下,创建一个标准B树聚集索引的表,并考虑一个设计良好的非聚集列存储索引,这将有助于实现第2点。
如果工作负载的OLTP组件很小,或者不是很关键,但是报告组件是关键的,那么您可以创建表作为集群列存储索引,然后添加许多starndard b树非聚集索引,以帮助支持OLTP组件。
https://dba.stackexchange.com/questions/164710
复制相似问题