Selectivity Maintenance per Segment
Index selectivities are now stored on a per-segment basis. This
means that, for a compound index on columns (A, B, C), three selectivity
values will be calculated, reflecting a full index match as well as all
partial matches. That is to say, the selectivity of the multi-segment
index involves those of segment A alone (as it would be if it were a
single-segment index), segments A and B combined (as it would be if it
were a double-segment index) and the full three-segment match (A, B, C),
i.e., all the ways a compound index can be used.
This opens more opportunities to the optimizer for clever access
path decisions in cases involving partial index matches.
The per-segment selectivity values are stored in the column
RDB$STATISTICS of table RDB$INDEX_SEGMENTS. The column of the same name in
RDB$INDICES is kept for compatibility and still represents the total index
selectivity, that is used for a full index match.