2

假设我们有下表:

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

和一个查询:

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

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

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

这在内部如何运作?

4

1 回答 1

2

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

于 2012-03-18T21:05:00.737 回答