目录
- 1 创建支持查询的索引
- 2 限制查询结果的数量来减少网络需求
- 3 使用投影来只返回需要的数据
- 4 使用$hint来选择一个特点的索引
- 5 使用增量运算符来执行服务端操作
进入MongoDB中文手册(4.2版本)目录
1 创建支持查询的索引
对于常见的查询,请创建索引。如果查询搜索多个字段,请创建一个复合索引。扫描索引比扫描集合快得多。索引结构按顺序存储其引用,且小于文档引用(documents reference)。
例如:
如果您有一个包含博客文章的posts集合,并且您定期发出按author_name字段排序的查询,则可以通过在author_name字段上创建索引来优化查询 :
db.posts.createIndex( { author_name : 1 } )
索引还可以提高对按给定字段进行常规排序的查询的效率。
例如:
如果您定期发出按timestamp字段排序的查询 ,则可以通过在timestamp字段上创建索引来优化查询:
创建索引:
db.posts.createIndex( { timestamp : 1 } )
优化此查询:
db.posts.find().sort( { timestamp : -1 } )
由于MongoDB可以按升序和降序读取索引,因此单键索引的方向无关紧要。
索引支持查询,更新操作以及聚合管道的某些阶段 。
在以下情况下,BinData类型索引健将更有效地存储在索引中:
- 二进制子类型的值在0-7或128-135的范围内,
- 并且,字节数组的长度为:0、1、2、3、4、5、6、7、8、10、12、14、16、20、24或32。
2 限制查询结果的数量来减少网络需求
MongoDB 游标以多个文档为一组返回结果。如果知道所需结果的数量,则可以通过发出该limit() 方法来减少对网络资源的需求。
这通常与排序操作结合使用。例如,如果您只需要从posts 集合查询到的10个结果,则可以发出以下命令:
db.posts.find().sort( { timestamp : -1 } ).limit(10)
有关限制结果的更多信息,请参见 limit()。
3 使用投影来只返回需要的数据
当您仅需要文档中字段的子集时,可以通过仅返回所需的字段来获得更好的性能。
例如,如果查询posts集合,你只需要timestamp,title,author,和abstract字段,你会发出以下命令:
db.posts.find( {}, { timestamp : 1 , title : 1 , author : 1 , abstract : 1} ).sort( { timestamp : -1 } )
有关使用投影的更多信息,请参见 查询返回的投影字段。
4 使用$hint来选择一个特点的索引
在大多数情况下,查询优化器(query optimizer)为特定操作选择最佳索引。但是,您可以使用hint()方法强制MongoDB使用特定索引。使用 hint()以支持性能测试,或在某些查询您必须选择一个字段或包含在多个索引中的字段。
5 使用增量运算符来执行服务端操作
使用MongoDB的$inc运算符可以递增或递减文档中的值。作为查询文档,在客户端中进行简单修改,然后将整个文档写入服务器的替代方法,这个运算符在服务器端增加该字段的值。当两个应用程序实例查询一个文件的时候,$inc运算符还可以帮助避免竞争状态,使得一个字段可以手动地递增的同时保存整个文档。
进入MongoDB中文手册(4.2版本)目录
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)