mongodb中$nin操作的优化

编程入门 行业动态 更新时间:2024-10-25 10:23:38

mongodb中$nin<a href=https://www.elefans.com/category/jswz/34/1770947.html style=操作的优化"/>

mongodb中$nin操作的优化

环境

mongodb:3.4
jdk:1.7

前言

====2018年2月5日=====start===
看完这个后,建议再看下这篇,因为讲的是一件事情
mongodb 创建局部索引【Partial Indexes】
====2018年2月5日=====end===

今天对一些项目调整包的结构,在沙盒测试时,发现有个接口很慢,查看接口后,发现,条件里面有这么个东东:

//内容为null的话,就不显示出来
urlQuery.append("ir_urlcontent", new BasicDBObject("$nin", new Object[]{null, ""}));

这句话的意思是排除掉ir_urlcontent为null和空串的。

而操作符$nin,根据官网的解释,其会匹配到大多数的索引。其结果就是,它还是需要全表查询。

官网解释:

The inequality operator $nin is not very selective since it often matches a large portion of the
index. 
As a result, in many cases, a $nin query with an index may perform no better than a $nin query
that must scan all documents in a collection

所以当条件里面有这个$nin操作时,性能肯定慢,怎么办呢?

$gt

就我的业务而言,是去掉null和"",可以这样写:

urlQuery.append("ir_urlcontent", new BasicDBObject("$gt", ""));

也就是使用$gt:""

我测试了效果是一样的:

当然,如果业务场景是$nin:["foo","yutao"],像这样指定特定的字符就没办法啦!

使用$gt:"",适合排除null和""

性能:其实使用$gt:""后,并没有想象中的那么快,就我的业务而言,72万的数据,查询获取总数时也需要2到4秒,比使用$nin好多啦,后者是直接请求超时。

不过我是沙盒环境,正式环境,有缓存,会好些。

参考地址:

/

更多推荐

mongodb中$nin操作的优化

本文发布于:2024-03-04 21:21:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1710450.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:操作   mongodb   nin

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!