Scenario: Multidimensional clustered (MDC) tables
As a scenario of how to work with an MDC table, we will
imagine an MDC table called Sales
that records sales data
for a national retailer. The table is clustered along the dimensions YearAndMonth
and Region
.
Records in the table are stored in blocks, which contain enough
consecutive pages on disk to fill an extent.
In Figure 1, a block is represented
by a rectangle, and is numbered according to the logical order of
allocated extents in the table. The grid in the diagram represents
the logical database partitioning of these blocks, and each square
represents a logical cell. A column or row in the grid represents
a slice for a particular dimension. For example, all records containing
the value 'South-central' in the Region
column are found in
the blocks contained in the slice defined by the 'South-central'
column in the grid. In fact, each block in this slice also only
contains records having 'South-central' in the Region
field.
Thus, a block is contained in this slice or column of the grid if
and only if it contains records having 'South-central' in the Region
field.

To determine which blocks comprise a slice, or equivalently, which blocks contain all records having a particular dimension key value, a dimension block index is automatically created for each dimension when the table is created.
In Figure 2, a dimension block index
is created on the YearAndMonth
dimension, and another on the Region
dimension.
Each dimension block index is structured in the same manner as a
traditional RID index, except that at the leaf level the keys point
to a block identifier (BID) instead of a record identifier (RID).
A RID identifies the location of a record in the table by a physical
page number and a slot number - the slot on the page where the record
is found. A BID represents a block by the physical page number of
the first page of that extent, and a dummy slot (0). Because all
pages in the block are physically consecutive starting from that one,
and we know the size of the block, all records in the block can be
found using this BID.
A slice, or the set of blocks containing pages with all records having a particular key value in a dimension, will be represented in the associated dimension block index by a BID list for that key value.

Figure 3 shows how a key from the
dimension block index on Region
would appear. The key is made
up of a key value, namely 'South-central', and a list of BIDs. Each
BID contains a block location. In Figure 3,
the block numbers listed are the same that are found in the 'South-central'
slice found in the grid for the Sales table (see Figure 1).

Similarly, to find the list of blocks containing all records having
'9902' for the YearAndMonth
dimension, look up this value
in the YearAndMonth
dimension block index, shown in Figure 4.
