方案:多维集群 (MDC) 表

作为如何使用 MDC 表的场景,我们将设想一个名为 Sales 的 MDC 表,用于记录国家零售商的销售数据。 该表按维度 YearAndMonthRegion进行集群。 表中的记录是以块为单位存储的,块包含磁盘上足够的连续页以填充扩展数据块。

图 1中,块由矩形表示,并根据表中已分配扩展数据块的逻辑顺序进行编号。 图表中的网格表示这些块的逻辑数据库分区,并且每个正方形表示一个逻辑单元。 网格中的列和行表示特定维的片。 例如,在 区域 列中包含值 "南北中心" 的所有记录都位于网格中的 "南北中心" 列所定义的切片中包含的块中。 事实上,此片中的每个块也仅包含在 区域 字段中具有 "南北中心" 的记录。 因此,当且仅当块在 区域 字段中包含具有 "南北中心" 的记录时,该块才包含在网格的此片或列中。

图 1。 具有“Region”和“YearAndMonth”维的称为 Sales 的多维表
维度为 "Region" 和 "YearAndMonth" 的多维表

为了便于确定哪些块组成片,或者哪些块包含具有特定维键值的所有记录,在创建表时将自动为每个维创建维块索引。

图 2中,将在 YearAndMonth 维度上创建维度块索引,并在 区域 维度上创建另一个维度块索引。 每个维块索引的结构方式与传统 RID 索引的结构方式相同,但在叶级,这些键指向块标识 (BID) 而不是记录标识 (RID)。 RID 通过物理页号和槽号(找到记录的页面上的槽)来标识表中记录的位置。 BID 通过该扩展数据块的第一页的物理页号和虚槽 (0) 来表示块。 因为块中的所有页在物理上是从该页开始连续的,并且我们知道该块的大小,所以可以使用此 BID 来找到该块中的所有记录。

片,或包含带有在维中具有特定键值的记录的页的一组块,将由该键值的 BID 列表在关联维块索引中表示。

图 2。 显示维块索引且具有“Region”和“YearAndMonth”维的 Sales 表
维度为 "Region" 和 "YearAndMonth" 的多维表,显示维度块索引

图 3 显示了 区域 上维度块索引中的键的显示方式。 键由键值(即“South-central”)和 BID 列表组成。 每个 BID 包含一个块位置。 在 图 3中,列出的块号与在 Sales 表的网格中的 "南北" 分区中找到的块号相同 (请参阅 图 1)。

图 3。 “Region”的维块索引中的键
“Region”的维块索引中的键

同样,要查找包含 YearAndMonth 维具有 "9902" 的所有记录的块的列表,请在 YearAndMonth 维块索引中查找此值,如 图 4中所示。

图 4。 “YearAndMonth”的维块索引中的键
“YearAndMonth”的维块索引中的键