当前位置: 首页 > news >正文

CouchBase稀疏索引和全量索引的对比

下面两个couchbase索引对比,为什么有where条件的查询很慢,没有where条件的很快,是什么原理?

CREATE INDEX adv_updated_atDESC ON datamesh.datamesh.data_products
(updated_at DESC) WHERE (updated_at is not missing)

CREATE INDEX adv_updated_atDESC ON datamesh.datamesh.data_products
(updated_at DESC INCLUDE MISSING)

这两个索引虽然都以 updated_at 的降序排列,但它们在处理缺失值的方式上有本质区别,从而影响了查询计划和性能:

  • 带 WHERE 条件的索引(稀疏索引)
    这个索引只包含 updated_at 不缺失的文档,即索引是稀疏的。虽然稀疏索引通常更小,但在查询时如果查询条件中再次显式使用了 updated_at is not missing,查询引擎可能需要在扫描索引时额外验证每条记录是否满足这个条件,甚至可能导致无法利用索引的覆盖特性,从而增加了额外的过滤步骤。

  • INCLUDE MISSING 的索引(全量索引)
    这个索引则会为所有文档建立索引,并用特殊标记包含缺失值。这样索引是完整的,查询引擎可以直接通过索引完成扫描(甚至实现覆盖查询),而无需再对文档是否满足某个条件做额外检查,因此性能更好。

总结原理
稀疏索引虽然减少了索引体积,但在查询时必须在索引扫描中额外执行过滤判断;而全量索引(带 INCLUDE MISSING)由于索引中已经包含所有文档,查询引擎可以利用更连续的索引结构和覆盖索引优化,从而加快查询速度。

因此,当查询条件中带有对缺失值的判断时,稀疏索引可能会因为额外的过滤和匹配逻辑导致性能下降,而全量索引则能更高效地支持这类查询。

相关文章:

  • Leetcode 3504. Longest Palindrome After Substring Concatenation II
  • react+antd封装一个可回车自定义option的select并且与某些内容相互禁用
  • ffmpeg中格式转换需要注意点总结
  • 设计模式基础入门
  • Android 使用CameraX实现预览、拍照、录制视频(Java版)
  • AI产品的基础设施:算法、数据与大语言模型
  • 解决安卓手机WebView无法直接预览PDF的问题(使用PDF.js方案)
  • 基于SpringBoot的仓库管理系统-023
  • 递归详解:从原理到实战
  • 9.常用模板引擎
  • Elasticsearch索引的字段映射
  • 串口中断接收与环形缓冲实例(apollo3 blue plus)
  • Perl 哈希
  • Springboot实战:如何用Docker和Kubernetes部署微服务
  • Unity中MonoBehaviour组件禁用时协程的行为
  • Qt基本框架(1)
  • 正则表达式和通配符
  • Python 中的 `partial`:函数参数预设的艺术
  • unity UI管理器
  • 笔记:代码随想录算法训练营day64:拓扑排序精讲、dijkstra(朴素版)精讲
  • 国家卫健委对近日肖某引发舆情问题开展调查
  • 4月制造业PMI为49%,比上月下降1.5个百分点
  • 打造沪派水乡的“湿意”,上海正在保护营造一批湿地空间
  • 长三角铁路“五一”假期运输今启动:预计发送旅客量增6%,5月1日当天有望创新高
  • 保利发展去年净利润约50亿元,在手现金1342亿元
  • 报告显示2024年全球军费开支增幅达冷战后最大