使用bitmap index(位图索引)时关联的row-ID存储在什么位置?
位图索引
row-ID存储位置及block-ID对应关系解答 1. 位图索引关联row-ID的存储位置
位图索引不会单独为每一行存储完整的row-ID,它通过压缩的位图结构隐式关联行ID,具体存储逻辑如下:
- 每个位图索引条目对应一个唯一的索引键值,条目包含三个核心部分:索引键值本身、该键值对应行范围的位图向量、该范围的起始
row-ID(或row-ID区间元数据),所有索引条目都存储在独立的索引段索引块中,和表的数据块完全分开。 - 位图向量的每个bit位的位置,和对应范围的起始
row-ID做偏移计算,就能得到该bit位对应数据行的完整row-ID,不需要单独存储每行的row-ID,这也是位图索引存储空间占用远低于B树索引的核心原因。
2. 位图与block-ID、块内行的对应关系
不存在「多个位图对应同一个block-ID、每个位图对应块内某一行」的情况,具体逻辑如下:
- 单个位图向量对应的是所有匹配该索引键值的行,覆盖的行范围通常跨多个数据块,不会仅对应单个块或者单个行。
- 同一个数据块内的不同行,如果对应不同的索引键值,会分别落在不同键值对应的位图向量中,是不同位图的不同bit位对应同一块内的不同行,而非一个位图对应块内某一行。
- 举个直观的例子:假设某用户表的
gender列建有位图索引,只有male、female两个索引键值,对应两个位图。某数据块内共有10行数据,其中6行性别为男、4行性别为女,那么这两个位图里分别有6个、4个bit位对应这个块里的行,不会出现10个位图分别对应块内10行的情况。
内容的提问来源于stack exchange,提问作者Bonita Montero
相关产品推荐
相关产品推荐

