索引字段范围查询与离散值查询的性能差异及优劣原因
索引整数属性的两类查询性能对比
问题场景
文档包含一个已建立索引的整数属性A,取值范围为1~10,对比以下两类查询的性能差异:
查询1:查找所有
A在2到7之间的文档
查询2:查找所有A等于2、9、4、7的文档
性能差异结论
两类查询存在明显性能差异,查询1(范围查询)的执行速度更快,核心原因如下:
- 索引结构适配性:整数索引通常基于有序结构(如B+树),范围查询可以直接定位到区间起始点,顺着有序节点连续遍历获取数据,全程仅需一次索引定位操作。而查询2是多值等值查询,数据库需要分别定位每个目标值的索引位置,多次独立的索引查找会累计额外开销。
- IO效率差异:范围查询在索引中对应连续的存储块,能充分利用数据库缓存机制,减少磁盘随机IO;多值等值查询的索引位置分散,读取时是随机IO,缓存命中率更低,IO耗时更高。
- 执行计划复杂度:范围查询的执行逻辑简洁,仅需一次区间扫描;多值等值查询需要合并多个单值查询的结果集,合并过程会带来额外的计算开销。
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

