MongoDB查询速度过慢,即使查询很简单且与索引对齐
我运行的是MongoDB服务器(这就是它运行的全部内容)。该服务器有64gb的RAM和16个内核,还有2TB的硬盘空间可供使用 文档结构 该数据库有一个包含约2000万个文档的集合MongoDB查询速度过慢,即使查询很简单且与索引对齐,mongodb,Mongodb,我运行的是MongoDB服务器(这就是它运行的全部内容)。该服务器有64gb的RAM和16个内核,还有2TB的硬盘空间可供使用 文档结构 该数据库有一个包含约2000万个文档的集合域。每个文档中都有相当数量的数据,但出于我们的目的,文档的结构如下: { _id: "abcxyz.com", LastUpdated: <date>, ... } 事实上,它是如此缓慢,以至于解释(在撰写本文时)已经运行了超过10分钟,还没有完成。如果这个问题结束了,我会更新它,
域。每个文档中都有相当数量的数据,但出于我们的目的,文档的结构如下:
{
_id: "abcxyz.com",
LastUpdated: <date>,
...
}
事实上,它是如此缓慢,以至于解释(在撰写本文时)已经运行了超过10分钟,还没有完成。如果这个问题结束了,我会更新它,但问题的关键当然是查询速度非常慢
我能做什么?我一点也不知道这个查询有什么问题
编辑
解释在55分钟后结束。这是:
{
"cursor" : "BtreeCursor Lastupdated_-1__id_1",
"nscanned" : 13112,
"nscannedObjects" : 13100,
"n" : 50,
"scanAndOrder" : true,
"millis" : 3347845,
"nYields" : 5454,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"LastUpdated" : [
[
ISODate("2011-11-22T17:39:48.013Z"),
ISODate("2011-11-22T15:01:54.851Z")
]
],
"_id" : [
[
"1300broadband.com",
{
}
]
]
}
}
您是否尝试过将_id添加到您的综合索引中。当您将它作为查询的一部分使用时,它是否仍然需要进行完整的表扫描?好的,我解决了它。罪魁祸首是“scanander”:true
,这表明索引未按预期使用。正确的复合索引首先包含主排序字段,然后是要查询的字段
{ "_id":1, "LastUpdated":1 }
遇到了一个非常类似的问题,Mongodb.org上的
范围查询也必须是索引中的最后一列
因此,如果您有键a、b和c并运行db.ensureIndex({a:1,b:1,c:1}),则以下是尽可能多地使用索引的“指导原则”:
好:
- 查找(a=1,b>2)
- 查找(a>1,a1和a1,b=2)
仅对一列使用范围查询或排序。
好:
- 查找(a=1,b=2)。排序(c)
- 查找(a=1,b>2)
- 查找(a=1,b>2和b2)。排序(b)
坏的:
- 查找(a>1,b>2)
- 查找(a=1,b>2)。排序(c)
希望有帮助
/J我有一个关于LastUpdated(asc)和_id(desc)的综合索引。这是正确的索引吗?但是在文档中它说这不适用于mongodb 1.6.0+;我使用的是2.0.6,但仍然存在同样的问题。这应该是,或者他们声称在使用B-树进行查询时违反了“物理定律”。我们使用索引“c,a,B”,并进行查找(a=x,B=y)。排序(c),大约需要1000毫秒,然后我使用了索引“a,B,c”,然后开始用0ms@kommradHomer这可能是由于缓存。重新启动mongo,然后再次发布结果。当您有另一个带有额外字段的索引时,您的内存使用情况发生了多大变化?@kommradHomer抱歉,我不记得了;这个问题已经三年多了
{
"cursor" : "BtreeCursor Lastupdated_-1__id_1",
"nscanned" : 13112,
"nscannedObjects" : 13100,
"n" : 50,
"scanAndOrder" : true,
"millis" : 3347845,
"nYields" : 5454,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"LastUpdated" : [
[
ISODate("2011-11-22T17:39:48.013Z"),
ISODate("2011-11-22T15:01:54.851Z")
]
],
"_id" : [
[
"1300broadband.com",
{
}
]
]
}
}
{ "_id":1, "LastUpdated":1 }