For bit attribute indices there is a particular attribute called the value attribute. The number of possible values (i.e. the number of values in the domain) for the value attribute must be small, and cannot change. For each value v of the value attribute, a bit vector is stored. The nth bit of this bit vector is one if the tuple with key value n has the value v for the value attribute. Boolean expressions on attributes which have these bit vectors translate easily to boolean expressions on the bit vectors. This results in a single bit vector which can then be used in physical operators set up to use bit vectors -- in Model D this is just the BIT_SEMIJOIN physical operator.


Figure 6.1: Bit Vector of Bit Attribute Index

           Figure 6.1 shows a bit vector for the attribute C_Mktsegment (CM) of the relation CUSTOMER for the value "Building".

           For bit predicate indices a bit vector exists for every predicate in a list of predicates. Bit predicate bit vectors are the same length as bit attribute bit vectors. Predicates are arbitrary sargable predicates. The nth bit of the predicate's bit vector is one, if for the tuple with key value n , the predicate evaluates to TRUE.

6.2 Physical Model:    <Access Methods> <Physical Operators> <Cost Model>
  6.1: Bit Vector     6.2: Operators  

 Page 3