列存储索引中列的顺序在 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:通过查询找出列的默认值

在 SQL Server 2014 中使用聚集列存储索引时,具有大量列的表是不是仍然是反模式?

SQL Server索引解密列的视图

更改 SQL Server DB 中列的数据类型时出错 - Java

如何列出 VIEW 中列的源表名 (SQL Server 2005)

浅析SQL Server数据库中的伪列以及伪列的含义