0

我对聚集索引和列存储索引没有几个问题。我们知道在聚集索引中特定列的数据的物理顺序正在改变并存储在二叉树的叶节点中。所以,我的问题是:
1)如果我们创建聚集列A上的索引,该列A的数据将从实际存储位置中删除并添加到二叉树叶子中?还是只是重新排列原始存储位置中的数据?

2)列存储索引呢,这里特定列的数据也会从实际存储位置中删除并加载到另一个单独的文件段中?

3)从上面的2个问题来看,如果数据是从原始位置移动的,例如:我们有一个表A有coulmns colA,colB,如果我们在colA上创建上述2个索引中的任何一个,那么原始位置只包含colB数据?colA 在其他位置?

4

1 回答 1

2

1) 当您创建聚集索引时,表将重建为聚集索引。没有“原始存储”,聚集索引是表,表是聚集索引。聚集索引被组织为B 树结构(不要与二叉树混淆)。

2) 列存储非聚集索引是表上的二级索引。与任何二级(非聚集)索引一样,非聚集索引中的每一行都是表基堆或聚集索引中数据的副本。列存储索引不是 B 树,也不是堆,而是一种针对面向列存储优化的新型数据组织。要了解面向列的存储的一般工作原理,请阅读C-Store 论文

3) 不可以。添加任何性质的非聚集索引,包括 XML、空间和列存储等特殊索引,绝不会从表基堆或聚集索引中删除数据。非聚集索引始终包含数据的副本。添加非聚集列存储索引不会以任何方式更改表基堆或聚集索引中的行和列(我怀疑您称之为“实际存储”)。

于 2012-04-22T07:38:28.167 回答