mongodb - 为什么 $nin 比 $in 慢,Mongodb
问题描述
我收集了具有正确索引的 5M 文档。$in 工作完美,但相同的查询 $nin 超级慢...这是什么原因?
超级快:
{'tech': {'$in': ['Wordpress', 'wordpress', 'WORDPRESS']}}
超级慢。。
{'tech': {'$nin': ['Wordpress', 'wordpress', 'WORDPRESS']}}
解决方案
当您有索引时(无论您谈论的是 MongoDB 还是任何其他数据库),搜索某个值总是比搜索不存在的值更快。
数据库必须扫描整个索引,当您查找“不在”或“不等于”时,通常甚至没有使用索引。看看执行计划explain()
一些数据库(例如 Oracle)提供所谓的位图索引。它们的工作方式不同,通常操作与IN
操作一样快NOT IN
。但是,像往常一样,与 B*Tree 索引相比,它们还有其他缺点。据我所知,Oracle 数据库是唯一支持位图索引的主要 RDBMS。
推荐阅读
- javascript - 选择数组内的嵌套 Typescript 类型泛型
- tfs - 我可以删除由 TFS 构建服务帐户创建的 Shelvesets
- javascript - 上传图片时默认加载 img 标签
- python-3.x - Osmnx ox.graph_from_place RuntimeError: b'no argument in initialization list'
- angular - 在菜单控制器上找不到 registerAnimation
- java - Java InputStream.available() 读取后返回 > 0
- python - 如何分别从文本小部件中检索行
- python - 为什么当内部函数为局部变量赋值时会发生UnboundLocalError
- dart - 有没有办法有条件地为类自定义序列化键?
- vue.js - 在 Vue js 中发布时缺少 csrf 令牌