SQL Server中CCI索引的工作原理及相关技术问题咨询
关于SQL Server聚集列存储索引(CCI)的两个问题解答
CCI创建时无需指定列,实际基于哪一列创建?
聚集列存储索引(Clustered Columnstore Index, CCI)不基于任何特定列创建,它是面向整张表所有字段的存储结构。
传统行存储的聚集索引本质是按指定键列构建的B+树结构,因此必须指定索引键列;但CCI的核心逻辑是把整张表的存储模式从按行存储改为按列存储,所有字段都会被拆分到列维度做压缩存储,不需要依赖某一列作为索引键,因此创建时不需要指定列名。
CCI是否和聚集索引一样,会基于特定列对表内数据排序?
默认不会,它和行存储聚集索引的排序逻辑完全不同:
- 传统行存储聚集索引会按照指定的索引键做全局物理排序,数据的物理存储顺序和索引键顺序完全一致
- 普通CCI没有全局排序的规则,它会把数据拆分到多个100万行左右的行组中,每个行组内的每一列单独存储为压缩段,物理存储顺序和任何列的值都没有绑定关系,仅会在段级别存储该段的最大最小值用于查询时的段消除。
- 补充:SQL Server 2022及更高版本新增了可选的有序CCI特性,支持指定排序列,不过这种排序是为了优化段消除的逻辑排序,和行存储聚集索引的强制全局物理排序仍有差异,不属于CCI的默认行为。
内容的提问来源于stack exchange,提问作者shubham kumar
相关产品推荐
相关产品推荐

