You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

低基数列的B-Tree索引执行方式解析

低基数列上B-Tree索引的执行机制

通常我们会建议:当列的可选值少于100个(低基数列)时,优先使用Bitmap(位图)索引;而可选值超过100个的列,适合创建B-Tree索引。但如果在低基数列上创建了B-Tree索引,它的执行逻辑如下:

执行流程

1. 遍历B-Tree定位目标键值

和非低基数列的B-Tree索引执行逻辑一致,数据库从B-Tree的根节点出发,逐层向下检索,最终定位到目标键值所在的叶子节点分支。

非低基数列上的B-Tree索引执行方式参考:
非低基数列B-Tree索引执行示意图

2. 批量读取关联行指针

由于是低基数列,同一个键值会对应大量行记录,因此在目标叶子节点中,会连续存储指向这些行的物理地址(如磁盘块号+偏移量)。数据库会一次性读取该键值关联的所有行指针,形成一个规模较大的指针集合。

3. 回表读取实际数据

拿到行指针集合后,数据库会根据这些指针定位到磁盘上的实际数据块,读取对应的整行数据。这一步的IO开销是关键:当匹配行数极多时,回表操作需要频繁访问数据块,效率远低于Bitmap索引。

与其他索引的执行差异

  • 和非低基数列B-Tree索引的区别:非低基数列每个键值仅对应少量行,回表IO开销低;低基数列键值对应大量行,回表IO成本显著上升,执行效率下降。
  • 和Bitmap索引的区别:Bitmap索引通过位图位标记匹配行,能快速完成多条件的与/或运算,且无需大量回表;而低基数列上的B-Tree索引依赖指针回表,单条件查询开销高,组合查询效率更差。

低基数列上的Bitmap索引执行方式参考:
低基数列Bitmap索引执行示意图

内容的提问来源于stack exchange,提问作者Arthur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:55:15