[英]How to improve the performance of this MongoDB / Mongoose query?
[英]MongoDB indexing - to improve search/query performance
我一直在阅读有关在mongoDB中建立索引以提高查询性能的信息。 我在网上发现了许多有用的资源。
从MongoDB的文档在这里
索引支持在MongoDB中高效执行查询。 没有索引,MongoDB必须执行集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的那些文档。 如果查询有合适的索引,MongoDB可以使用该索引来限制它必须检查的文档数
我理解上述completely.I发现了另一个资源这是令人惊讶的有益这里
他们在这里尝试查找没有索引的from_user“ paasdude”。
db.tweets.find({'from_user':'paasdude'}).explain();
{
"cursor" : "BasicCursor",
"nscanned" : 51748,
"nscannedObjects" : 51748,
"n" : 35,
"millis" : 40,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
}
}
在这里,他们向“来自用户”字段添加索引,据我了解,值“ 1”表示按升序对其进行排序。
db.tweets.ensureIndex({'from_user' : 1});
他们在这里尝试找到带有索引的from_user“ paasdude”。
db.tweets.find({'from_user':'paasdude'}).explain();
{
"cursor" : "BtreeCursor from_user_1",
"nscanned" : 35,
"nscannedObjects" : 35,
"n" : 35,
"millis" : 3,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"from_user" : [
[
"paasdude",
"paasdude"
]
]
}
}
显然,添加索引后,查询时间从40毫秒减少到3。
我的问题:
尽管我了解索引的概念和需求,但我不了解它的实际工作原理。
通过给“ from_user”字段赋予索引1,是否按升序对所有from_user字段进行排序?
索引仅以升序(1)还是降序(-1)工作?
为什么仅通过在from_user字段中添加索引1来将查询时间从40毫秒减少到3毫秒?
什么时候应该使用索引?
注意:对于此问题对于堆栈溢出而言,我很抱歉。 这是一个更具概念性的问题,我不确定还有什么要问的。 如果您知道一个更好的地方问这个问题。 请让我知道,我将移动它。
您已经回答了部分自己的问题。 索引支持在MongoDB中高效执行查询。 没有索引,MongoDB必须执行集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的那些文档。 如果查询存在适当的索引,则MongoDB可以使用该索引来限制它必须检查的文档数。 举一个具体的例子,您可能使用了索引来访问mongoDB文档,而不是从头到尾阅读文档,这一定为您节省了很多时间。
关于排序顺序,在您的情况下,排序顺序没有太大的区别。 如果查询返回大量记录,并且输出按索引字段排序,则排序顺序将变得更加相关。 在这种情况下,如果索引顺序与排序顺序匹配,则查询执行将更快。
当您需要创建索引时,这有点荒唐,但是,根据经验,如果经常过滤索引并且查询时间变慢,则应在字段上添加索引。 由于索引需要存储空间,并且在插入新记录时需要保持最新,因此通常最好限制索引的数量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.