Mongodb 海量数据的高效索引

Mongodb 海量数据的高效索引,mongodb,Mongodb,我有一个储存电话号码的栏。我添加了一个索引,查询正在按预期使用它。但这个指数有效吗?当我有数百万张唱片时,它还会快吗 >db.testData.ensureIndex({phone:1}) >find({“phone”:“267884851”}).explain() { “光标”:“BtreeCursor phone_1”, “未扫描”:1, “非扫描对象”:1, “n”:1, “毫”:0, “NYELDS”:0, “跳过”:0, “isMultiKey”:没错, “indexOnly”:错误,

我有一个储存电话号码的栏。我添加了一个索引,查询正在按预期使用它。但这个指数有效吗?当我有数百万张唱片时,它还会快吗

>db.testData.ensureIndex({phone:1})
>find({“phone”:“267884851”}).explain()
{
“光标”:“BtreeCursor phone_1”,
“未扫描”:1,
“非扫描对象”:1,
“n”:1,
“毫”:0,
“NYELDS”:0,
“跳过”:0,
“isMultiKey”:没错,
“indexOnly”:错误,
“指数边界”:{
“电话”:[
[
"267884851",
"267884851"
]
]
}
}
>db.testData.find({“phone”:“267884851”})
{“_id”:ObjectId(“537ae3b8c461dc377b5d99a6”),“x”:211,“电话”:[“27848690”,“267884851”]}

我认为这将是有效的,因为现在电话号码搜索将开始使用二进制搜索,其运行复杂度为log(N),其中N是记录数,因此,如果您有10000000条记录,在最坏的情况下,需要24次迭代才能找到该记录(如果它存在),这样就足够了


我在想,因为您将电话号码保留为字符串,如果可能的话,将其保留为整数会更好吗?在字符串比较的情况下,整数应该更好。

在运行db.testData.find({“phone”:“267884851”},{“phone”:1,_id:0})。explain()理想情况下,您希望“indexOnly”:true出现在那里。除此之外,德维斯特所说的是正确的。关于字符串和数字的观点是非常正确的。如果您需要对数字进行格式化,请在代码中使用模板进行格式化。另外,电话号码的一部分要点应该是它们是唯一的,否则你可能会打电话给其他人。因此,当您打算获得精确匹配时,请使索引唯一。关于索引的评论有点离谱。但是如果可能的话,如果你有另一个常用的字段,你可以将它作为唯一的结果字段和“phone”一起返回,那么你就有了一个覆盖索引,这是非常有效的。