欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

在MongoDB中创建一个索引而性能提升1000倍的小例子

程序员文章站 2022-04-13 15:27:37
在https://www.cnblogs.com/xuliuzai/p/9965229.html的博文中我们介绍了MongoDB的常见索引的创建语法。部分同学还想看看MongoDB的威力到底有多大,所以,在这儿追加一个例子,感受一下索引的性能。 通过在某一字段上创建索引,从优化前的执行15.15S到 ......

在的博文中我们介绍了mongodb的常见索引的创建语法。部分同学还想看看mongodb的威力到底有多大,所以,在这儿追加一个例子,感受一下索引的性能。

通过在某一字段上创建索引,从优化前的执行15.15s到优化后降至0.013s,性能提升了1000多倍。

此为实际生产中的一个真实案例,我们有一个集合qqstatements,其数据量为2604w,如下图所示。

在MongoDB中创建一个索引而性能提升1000倍的小例子

系统需要查询此表最近的变动情况,即需要抓取新增数据量和修改的数据量。

查询语句如下:

db.qqstatements.find({
    $or:
    [
        {rec_createtime:{$gt: isodate("2019-01-07 16")}}
        ,{rec_modifytime:{$gt: isodate("2019-01-07 16")}}
        ]
    
} )

但此查询语句不理想,有时耗时25s,多次执行有缓存后也要15s左右,如下图:

在MongoDB中创建一个索引而性能提升1000倍的小例子

 

查看此表,发现rec_createtime字段建有索引,单独执行符合rec_createtime 条件的语句,很快 0.1 s 内就执行完成。

在MongoDB中创建一个索引而性能提升1000倍的小例子

而rec_modifytime字段没有索引,单独执行符合rec_modifytime条件的语句较慢,需要15s左右。

在MongoDB中创建一个索引而性能提升1000倍的小例子

 

到这儿,就可以判读出问题是缺失索引,和开发同学确认后,此场景时常用,此字段需要添加索引。

执行添加索引的命令:

db.qqstatements.createindex({"rec_modifytime":1},{"name":'idx_rec_modifytime',background:true})

 rec_modifytime字段添加索引后,整个语句执行降至0.013s(20s-->0.02s )

在MongoDB中创建一个索引而性能提升1000倍的小例子

 

 从上面可以看出在mongodb数据库中索引很有必要,性能可以优化数百倍。

 

 本文版权归作者所有,未经作者同意不得转载,谢谢配合!!!