列存储索引中列的顺序在 SQL Server 2012 中是不是重要
Posted
技术标签:
【中文标题】列存储索引中列的顺序在 SQL Server 2012 中是不是重要【英文标题】:Does order of the columns in columnstore index matters in SQL Server 2012列存储索引中列的顺序在 SQL Server 2012 中是否重要 【发布时间】:2012-04-02 04:47:46 【问题描述】:我有一个大约 2 亿行和大约 15 列的表。我打算在我的表上创建列存储索引。根据我在列存储索引中使用的列的顺序,性能是否会有任何变化?如果是,其背后的逻辑是什么?
【问题讨论】:
在dba.stackexchange 上询问可能会更好,但是 +1 - 这对我来说是个新闻。 @OMGPonies:谢谢,我也在 dba.stackexchange 中发帖。这是链接dba.stackexchange.com/questions/15930/… 【参考方案1】:最重要的方面是将所有列添加到列存储索引。我就此与 MSFT 产品团队进行了交谈,因为我对“列顺序无关紧要”的说法持怀疑态度。但他们证实,只要您添加表格的所有列,这是真的。
我还尝试了部分列存储索引(即仅添加列的子集),虽然我能够获得我测试的查询以使用该列存储索引,但显然查询优化器不是针对这种情况构建的,因为执行计划将是不一致的,并不总是最优的,即使用列存储和非列存储索引等。
【讨论】:
【参考方案2】:不,没有任何区别。
【讨论】:
此链接提供了更多详细信息。 blogs.technet.com/b/dataplatforminsider/archive/2011/08/04/…【参考方案3】:不,列顺序无关紧要,还要为所有用例将所需的所有列添加到列存储索引中,因为只能有 1 个列存储索引,这不会影响性能。
【讨论】:
【参考方案4】:没有。
我刚刚在 2 小时前为我的事实表创建了一个列存储索引,查询成本(相对于批处理)现在是 14% 的索引和 86% 的没有索引。我觉得还不错。执行计划如下。 您可以在运行查询时使用“OPTION (IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX)”进行比较
http://uploadimage.ro/img.php?image=4508_execution_plan_sk6y.png
【讨论】:
以上是关于列存储索引中列的顺序在 SQL Server 2012 中是不是重要的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 2014 中使用聚集列存储索引时,具有大量列的表是不是仍然是反模式?
更改 SQL Server DB 中列的数据类型时出错 - Java