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

栏目: 数据库 · 发布时间: 7年前

内容简介:在通过在某一字段上创建索引,此为实际生产中的一个真实案例,我们有一个集合QQStatements,其数据量为2604W,如下图所示。

https://www.cnblogs.com/xuliuzai/p/9965229.html 的博文中我们介绍了 MongoDB 的常见索引的创建语法。部分同学还想看看MongoDB的威力到底有多大,所以,在这儿追加一个例子,感受一下索引的性能。

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

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

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

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

查询语句如下:

db.QQStatementsStatements.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.014S(20S-->0.02S )

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

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

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Writing Apache Modules with Perl and C

Writing Apache Modules with Perl and C

Lincoln Stein、Doug MacEachern / O'Reilly Media, Inc. / 1999-03 / USD 39.95

Apache is the most popular Web server on the Internet because it is free, reliable, and extensible. The availability of the source code and the modular design of Apache makes it possible to extend Web......一起来看看 《Writing Apache Modules with Perl and C》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具