我有专栏保存电话号码。我添加了一个索引,查询正在按预期使用它。但这个指数有效吗?当我拥有数百万条记录时,它会不会很快?
> 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" ] }
答案 0 :(得分:0)
我认为它会很有效率,因为现在电话号码的搜索将开始使用二进制搜索,其运行复杂度为 log(N),其中N是记录数,所以如果你有10000000条记录,它将会在最坏的情况下需要24次迭代来查找记录是否存在,所以足够好了。
我在想,因为你把你的电话号码保留为字符串,如果你把它保持为整数会更好(如果可能的话,在字符串比较的情况下应该更好)。