首页 > 解决方案 > 为什么 $nin 比 $in 慢,Mon​​godb

问题描述

我收集了具有正确索引的 5M 文档。$in 工作完美,但相同的查询 $nin 超级慢...这是什么原因?

超级快:

{'tech': {'$in': ['Wordpress', 'wordpress', 'WORDPRESS']}}

超级慢。。

{'tech': {'$nin': ['Wordpress', 'wordpress', 'WORDPRESS']}}

标签: mongodbperformancemongodb-querypymongo

解决方案


当您有索引时(无论您谈论的是 MongoDB 还是任何其他数据库),搜索某个值总是比搜索不存在的值更快。

数据库必须扫描整个索引,当您查找“不在”或“不等于”时,通常甚至没有使用索引。看看执行计划explain()

一些数据库(例如 Oracle)提供所谓的位图索引。它们的工作方式不同,通常操作与IN操作一样快NOT IN。但是,像往常一样,与 B*Tree 索引相比,它们还有其他缺点。据我所知,Oracle 数据库是唯一支持位图索引的主要 RDBMS。


推荐阅读