Mongo $ near查询在1.2百万个文档上需要6个

时间:2014-12-20 17:18:48

标签: mongodb query-optimization geospatial bigdata database

我在MongoDb中插入了大约1.2百万个相同的文档来测试地理空间索引的速度

这是一个查询:

db.spreads.find({ loc: { '$near': { '$geometry': {type: "Point" , coordinates: [40,40]}, '$maxDistance': 10000000 } } }).explain();

结果

{
    "cursor" : "S2NearCursor",
    "isMultiKey" : false,
    "n" : 1568220,
    "nscannedObjects" : 12545154,
    "nscanned" : 12545154,
    "nscannedObjectsAllPlans" : 12545154,
    "nscannedAllPlans" : 12545154,
    "scanAndOrder" : false,
    "indexOnly" : false,
    "nYields" : 0,
    "nChunkSkips" : 0,
    "millis" : 11413,
    "indexBounds" : {

    },
    "server" : "s1.heychat.io:27017",
    "filterSet" : false
}

索引:

  

db.spreads.getIndexes();

[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.spreads"
    },
    {
        "v" : 1,
        "key" : {
            "loc" : "2dsphere"
        },
        "name" : "loc_2dsphere",
        "ns" : "test.spreads",
        "2dsphereIndexVersion" : 2
    }
]

为什么这么慢?

1 个答案:

答案 0 :(得分:1)

解释输出中的

"n" : 1568220表示查询返回了150万个文档。这就解释了为什么花了这么长时间。

使用更小的$maxDistance可能是一个更好的测试。