MongoDB索引有什么用



我有一个mongo集合,里面有数百万个具有相同字段的文档,例如

{
"_id" : ObjectId("601ade833126047ee8f47182"),
"file_id" : "60110b7dad0cf20001adcbef",
"versions" : [
{
"local" : 6,
"s3" : "C71rczduuVOPpMohCpCeBQ3_NARDnTRj"
}
]
}
{
"_id" : ObjectId("60221d1039acf39e09fbfca5"),
"file__id" : "5fdb2eb4ad0cf20001f97856",
"versions" : [
{
"local" : 2,
"s3" : "aCy61Gx_UpTZfY59hNLYryGuWTJO2oPk"
}
]
}
{
"_id" : ObjectId("60221dc639acf39e09fbfca6"),
"file_id" : "5fe9c897a675f20001f0a82e",
"versions" : [
{
"local" : 3,
"s3" : "PHLnYjsRlg3GnEQ_UeDkhWIaJbFRmpw9"
}
]
}
{
"_id" : ObjectId("6050cbcd6b7aab2cd3958978"),
"file_id" : "6040ca06a675f2000115985e",
"versions" : [
{
"local" : 2,
"s3" : "vdFY22JFAzU.cD1Xr0eliuwt00rpJC8j"
}
]
}

我的问题是,如果我给出命令collection.find({"file_id": some_string}),mongodb必须搜索整个集合才能找到带有"的文档file_id";我正在寻找。Will Indexing">file_id";有助于减少执行时间?。在我的情况下,收藏中的所有文档都将具有密钥">file_id";。在这种情况下,索引真的有帮助吗?。

您问:

Will Indexing;file_id";有助于减少执行时间?

答案是,很可能是的,向file_id字段添加索引将大大加快上面显示的查找查询的速度。你自己试试看:

db.your_collection.createIndex( { "file_id": 1 } )

默认情况下,上述命令将使用file_id字段值创建B-树索引。深入了解B树的工作原理可能超出了任何一个答案的范围,但总的来说,如果Mongo使用此索引按file_id搜索,它应该按O(lgN)执行,其中N是集合中BSON文档的数量。另一方面,在没有任何索引的情况下按原样运行查询,应该会产生完整的集合扫描,这应该是一个线性O(N)操作。请注意,这比使用索引慢指数

最新更新