关于行存储数据页概念,聚集列存储索引和非聚集列存储索引有什么区别

What is the difference between clustered and non-clustered columnstore index with respect to rowstore data page concept

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

  2. In 基于行的非聚集索引 - 创建了一个数据结构来保存索引列。索引列的每个 都包含该列的行值,并且每一行都指向(另一页)聚集索引 table 键行或堆行(如果不存在聚簇索引)其余数据。

我理解 columnstore index 的概念 - 在存在行组的意义上。每个行组都包含 table 中每一列的一个列段(压缩),并且有一个增量存储来保存 Inserts/Updates 直到调用下一个元组移动进程。基于行存储索引的上述两点(page)请问在集群和非集群列存储索引的情况下它是如何工作的。

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

在比较行存储与列存储时,术语聚集表示所有列,non-clustered 表示一些列(除非包含所有列)。 rowstore/columnstore 组织的不同架构之间没有其他相似之处。我个人在提及列存储时甚至根本不使用索引这个词,因为该结构针对扫描而不是查找进行了优化,并且经常导致混淆。

列存储索引段,无论是否聚集,本质上只是存储在 pages/extents 中的压缩数据块。行存储,OTOH,每行都有一个记录结构,以容纳不同类型和可空性的多个列,这就是为什么它们不像列存储数据那样压缩。