MongoDB查询速度过慢,即使查询很简单且与索引对齐

MongoDB查询速度过慢,即使查询很简单且与索引对齐,mongodb,Mongodb,我运行的是MongoDB服务器(这就是它运行的全部内容)。该服务器有64gb的RAM和16个内核,还有2TB的硬盘空间可供使用 文档结构 该数据库有一个包含约2000万个文档的集合域。每个文档中都有相当数量的数据,但出于我们的目的,文档的结构如下: { _id: "abcxyz.com", LastUpdated: <date>, ... } 事实上,它是如此缓慢,以至于解释(在撰写本文时)已经运行了超过10分钟,还没有完成。如果这个问题结束了,我会更新它,

我运行的是MongoDB服务器(这就是它运行的全部内容)。该服务器有64gb的RAM和16个内核,还有2TB的硬盘空间可供使用

文档结构

该数据库有一个包含约2000万个文档的集合
。每个文档中都有相当数量的数据,但出于我们的目的,文档的结构如下:

{
    _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 }