2012-03-28 43 views
4

列存储索引的优点之一是单列数据“彼此相邻存储在磁盘上”。这代表更好的压缩和更快的读取时间。SQL Server 2012:性能列存储索引与B树

但是;当使用B树(一个常规的非聚集索引)时,不是树的叶子数据本身?因此,当我在列A上创建索引时,列A中的所有字段都不会与磁盘平行排列在磁盘上吗?这意味着数据可以被压缩并且可以被快速读取。

所以简而言之:当一个列存储索引的性能比单个列上的B树更高时?

在此先感谢!

回答

1

因此,当我在列A上创建索引时,列A 的所有字段都不会显示在磁盘上与表并行排序?

是的,列A将被排序。但所有其他列不会。列存储索引按排序顺序存储所有列(大小为2^20行)。

+0

好的。但是,当您从列A中选择某项内容时,无论哪种情况,A的所有数据都会被排序。那么我是否可以假设在查询其他列时列存储索引更高效? 但是当我简单地在这些列上放置一棵B树时呢? – Gurdt 2012-03-29 07:16:37

+0

当您需要排序数据时,B-Tree根本不需要排序操作(如果您请求的列是索引的前缀)。列存储无法对它们进行排序,因为它将它们存储在每2^20行中。如果您有多个此类细分,则无法提供排序顺序。 – usr 2012-03-29 08:28:38

+0

我想这里可能会有一些误解。 列存储索引的目的是(或者我认为),从磁盘读取数据的开销较小,因为只能加载相关的列。当从一个行存储装载时,一个整体读取行,因此加载可能不需要的列。 现在的情况如下:如果我只对一列感兴趣,比如A,那么与简单的B树(非聚集索引)相比,列存储索引如何能够更高效。非聚集索引的叶子实际上存储为一列,场后场,尽可能紧凑。 – Gurdt 2012-03-29 08:43:30