如果没有合适的index,query的时候os需要把整个mongodb需要的文档全部读进物理内存,数据的大小超过物理内存的时候就会变慢。
query不同的db的时候,如果上一个query正好是同一个db,那么需要的那部分内容都已经在物理内存里了,就会很快;如果上一个query是一个大数据库,当前的query是另一个大数据库,os会需要腾出物理内存,然后把这次query需要的内容读进物理内存,这样就会变慢。
如果你的硬盘读写速度本身就很慢,那mongodb自然也会很慢。
有索引非常快,数据量几百万都是小意思索引这个东西大家不会陌生,只要接触到稍微大一点的数据,都会用到这东西,它可以提升查询的速度,相当代价就是占用了更多的存储空间,这也是正常
的,符合“能量守恒定理”,哈哈!今天说的是MongoDB里的索引,在我进行对500万数据进行查询测试时,发现如果你的查询字段不加索引,那是相当恐
怖的,一个简单的查询(单字段)要耗时30多秒,这种 *** 作,基本可以认为服务器挂了,哈哈!当为字段加了索引之后,查询速度为ms级,100毫秒以内的速
度真是把经兴奋坏了,呵呵!
建立索引 db.tableName.ensureIndex({"fieldName",1|-1})
对于为500万的数据加索引相当需要占用一点点时间了,不是马上响应的,这也会正常,呵呵!当加完索引后,你可以通过MongoVUE这种可视化工具对它进行查看,或者直接用命令db.tableName.getIndexes()也可以
在选中数据库background后,我们可以看到它的集合数据和集合索引分别占用的空间
当为表(集合,collection)加上索引后,我们的WEB页面测试一下可以看到,页面响应在ms级,非常快!
对于单表查询来说,MongoDB在添加了索引后,执行的速度和稳定性确实是可以信赖的,在进行复杂计算时,MongoDB也为我们提供了MapReduce功能,在以后的文章中也会单独讲它!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)