SQL Server 2012:列存储索引如何同时提供多个列



假设我们有下表:

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

还有一个查询:

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

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

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

这在内部是如何运作的?

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

相关内容

  • 没有找到相关文章

最新更新