相对于行存储数据页概念,集群列存储索引和非集群列存储索引之间有什么区别

时间:2019-06-12 10:40:11

标签: sql-server columnstore

  1. 基于行的聚集索引中:整个表数据(所有列)均按聚集索引列排序。每个页面包含特定数量的行和所有列。

  2. 在基于行的非聚集索引中-创建了一个保存索引列的数据结构。索引列的每个页面都保留该列的行值,并且每一行都指向(另一页)聚簇索引表键行或堆行(如果不存在聚簇索引)以供休息数据。

我理解列存储索引的概念-从某种意义上说,存在行组。每个行组在表中的每一列都包含一个列段(压缩),并且有一个增量存储区来保存插入/更新,直到调用下一个元组移动器进程为止。根据行存储索引(页面)的上述两点,请告诉我在群集和非群集列存储索引的情况下它如何工作。

示例-对于列存储非聚集索引存储,它在概念上与行存储非聚集索引是否相同-也就是说-索引列的单独页面,其值指向堆或聚集索引键。

1 个答案:

答案 0 :(得分:1)

在比较行存储区和列存储区时,术语“聚簇”表示所有列,而“非聚簇”表示某些列(除非其中一个包含所有列)。行存储/列存储组织的不同架构之间没有其他相似的地方。提到列存储时,我个人甚至根本不使用索引一词,因为该结构针对扫描而不是查找进行了优化,并且经常导致混乱。

列存储索引段(无论是否聚集)实质上只是存储在页面/范围中的压缩数据块。 OTOH行存储具有针对每一行的记录结构,以容纳不同类型和可空性的多个列,这就是为什么它们不像列存储数据那样压缩的原因。