【问题标题】:Does order of the columns in columnstore index matters in SQL Server 2012列存储索引中列的顺序在 SQL Server 2012 中是否重要
【发布时间】:2012-04-02 04:47:46
【问题描述】:

我有一个大约 2 亿行和大约 15 列的表。我打算在我的表上创建列存储索引。根据我在列存储索引中使用的列的顺序,性能是否会有任何变化?如果是,其背后的逻辑是什么?

【问题讨论】:

标签: sql sql-server sql-server-2012 columnstore


【解决方案1】:

最重要的方面是将所有列添加到列存储索引。我就此与 MSFT 产品团队进行了交谈,因为我对“列顺序无关紧要”的说法持怀疑态度。但他们证实,只要您添加表格的所有列,这是真的。

我还尝试了部分列存储索引(即仅添加列的子集),虽然我能够获得我测试的查询以使用该列存储索引,但显然查询优化器不是针对这种情况构建的,因为执行计划将是不一致的,并不总是最优的,即使用列存储和非列存储索引等。

【讨论】:

    【解决方案2】:

    不,没有任何区别。

    【讨论】:

    【解决方案3】:

    不,列顺序无关紧要,还要为所有用例将所需的所有列添加到列存储索引中,因为只能有 1 个列存储索引,这不会影响性能。

    【讨论】:

      【解决方案4】:

      没有。

      我刚刚在 2 小时前为我的事实表创建了一个列存储索引,查询成本(相对于批处理)现在是 14% 的索引和 86% 的没有索引。我觉得还不错。执行计划如下。 您可以在运行查询时使用“OPTION (IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX)”进行比较

      http://uploadimage.ro/img.php?image=4508_execution_plan_sk6y.png

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-13
        • 2017-05-21
        • 2018-06-01
        • 1970-01-01
        • 2012-04-12
        • 1970-01-01
        • 2017-12-19
        • 2014-08-10
        相关资源
        最近更新 更多