SQL Server 2012 : How can a column-store index provide multiple columns at once?

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

假设我们有下表:

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)。

这在内部是如何运作的?

最佳答案

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

关于SQL Server 2012 : How can a column-store index provide multiple columns at once?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761074/

相关文章:

java - 另一个类中的 SQL 更新

sql-server - SQL 过程中的打印语句会影响性能吗?

python - 使用 Pandas 数据框创建一个类(更新)

php - 选择从字段 3 到字段 4 的唯一行

php - 如何使用 PHP 跟踪数据库表中的更新?

每个组内的 SQL 连接

java - 日期的 Jdbc sql 语法错误

sql - 使用日期范围对行进行分组

asp.net - 从成本角度看使用 MSSQL 而不是 MySQL 的理由

数据库:拆分表