高效的大数据索引

时间:2014-05-20 05:21:32

标签: mongodb

我有专栏保存电话号码。我添加了一个索引,查询正在按预期使用它。但这个指数有效吗?当我拥有数百万条记录时,它会不会很快?

> db.testData.ensureIndex( { phone: 1 } )

> db.testData.find({"phone":"267884851"}).explain()
{
        "cursor" : "BtreeCursor phone_1",
        "nscanned" : 1,
        "nscannedObjects" : 1,
        "n" : 1,
        "millis" : 0,
        "nYields" : 0,
        "nChunkSkips" : 0,
        "isMultiKey" : true,
        "indexOnly" : false,
        "indexBounds" : {
                "phone" : [
                        [
                                "267884851",
                                "267884851"
                        ]
                ]
        }
}
> db.testData.find({"phone":"267884851"})
{ "_id" : ObjectId("537ae3b8c461dc377b5d99a6"), "x" : 211, "phone" : [ "27848690", "267884851" ] }

1 个答案:

答案 0 :(得分:0)

我认为它会很有效率,因为现在电话号码的搜索将开始使用二进制搜索,其运行复杂度为 log(N),其中N是记录数,所以如果你有10000000条记录,它将会在最坏的情况下需要24次迭代来查找记录是否存在,所以足够好了。

我在想,因为你把你的电话号码保留为字符串,如果你把它保持为整数会更好(如果可能的话,在字符串比较的情况下应该更好)。