gpt4 book ai didi

mongodb - 复合索引可以服务多个查询吗

转载 作者:IT老高 更新时间:2023-10-28 13:14:07 26 4
gpt4 key购买 nike

我有一个按名称命名的工厂集合。

在此集合上,将有两种类型的查询将在名为 factories 的集合上命中,如下所示

db.factories.find({ city: "New York", state: "NY"} );


db.factories.find({ city: "New York", state: "NY" , country:"US"} );

我的问题是,如果我创建一个如下所示的复合索引,它会同时服务于两个查询吗?

db.factories.ensureIndex({city:1,state:1,country:1},{"unique" : false})

最佳答案

是的。

要理解为什么答案是肯定的,我们需要谈谈复合索引是如何实际构建的。

复合索引中的字段从第一个到最后一个是嵌套在父级中的所有子级的值。这意味着如果您有三个文件,例如:

[{
_id:{},
a: 1,
b: 2,
c: 3
},{
_id:{},
a: 4,
b: 5,
c: 6
},{
_id:{},
a: 7,
b: 8,
c: 9
}]

并在以下位置建立了索引:

db.collection.ensureIndex({a:1,b:1,c:1})

索引实际上看起来像:{1: [2,3]},第一个值是最左边的字段,另外两个是出现在最左边的值下的值.

当然这不是索引的实际外观,我这样做只是为了让每个人都可以阅读。 要了解索引的实际形成方式,您可以观看一些演示文稿,其中一个我找到一个值得关注的事实是:http://www.mongodb.com/presentations/storage-engine-internals在存储内部。

所以这意味着 MongoDB 通过前缀方法来选择这个索引,它会说 aa,b 是索引的前缀,它可以使用这些字段从索引中获取所需的所有其他值。

以这种方式加前缀意味着如果你查询,索引将不起作用:

db.collection.find({state:"NY",country:"YS"});
db.collection.find({state:"NY"});
db.collection.find({country:"YS"});

请注意,查询中的顺序并不重要。您可以将查询中的字段设置为您喜欢的任何顺序,重要的是在索引中。

无论如何,这就是为什么查询将使用该单一索引的入门。

关于mongodb - 复合索引可以服务多个查询吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18698024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com