【问题标题】:SQL Server 2012: How can a column-store index provide multiple columns at once?SQL Server 2012:列存储索引如何一次提供多个列?
【发布时间】:2012-03-18 18:34:57
【问题描述】:

假设我们有下表:

CREATE TABLE T (
 ID INT,
 String1 nvarchar(400),
 String2 nvarchar(400)
)

还有一个查询:

select String1, String2, count(*)
from T
group by String1, String2

如果 T 由 column-store index 索引,则此分组查询通常由非聚集列存储索引扫描驱动。

如果列存储索引以逐列格式存储行,并且每列单独排序,那么它如何一次为每行提供多个列? 这似乎是不可能,因为各个列按不同的排序顺序排序。我想不出任何方法可以将各个列合并回包含两列的整行(本例中为 String1、String2)。

这在内部是如何工作的?

【问题讨论】:

  • 列存储索引的内部结构目前没有很好的文档记录(并且不确定它们是否会成为文档反复提及专有方法)。不过,您可能会发现 this answer(以及 cmets 中的链接)很有用。 PowerPoint 演示文稿讨论了段键和连接索引。

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


【解决方案1】:

每一列都是单独存储的,因此系统必须对列索引进行多次访问(每列选择一个),然后在内部将结果连接在一起以返回最终查询结果。这仍然非常有效,因为列存储索引大大减少了所需的 I/O,尽管查询大量列可能会很慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2015-08-07
    相关资源
    最近更新 更多