首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MongoDB :索引顺序和查询顺序必须匹配?

MongoDB :索引顺序和查询顺序必须匹配?
EN

Stack Overflow用户
提问于 2011-03-09 20:25:24
回答 1查看 10.6K关注 0票数 27

这个问题涉及到管理索引和搜索Bson文档的内部方法。

当你创建像"index1","index2",“index3”这样的多个索引时,...the索引会被存储起来,以便在查询时使用,但是查询的顺序和产生的性能又如何呢?

示例

index1,index2,index3 ->以相同顺序查询index1,index2,index3 (最佳情况) index1,index2,index3->以另一顺序查询index2,index1,index3(顺序已更改)

您经常使用嵌套查询,包括这3个索引和其他项或更多索引。查询的顺序将意味着一些时间的损失?传递关于所定义的索引顺序或内部架构的查询是否必须关注此顺序搜索?我想知道我是否真的关心这一点,或者是否可以让我在自由中的查询更多。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-09 21:09:34

查询中条件的顺序不会影响它是否可以使用索引。

例如典型的文档结构:

代码语言:javascript
复制
{
    "FieldA" : "A",
    "FieldB" : "B"
}

如果您在A和B上有一个复合索引:

代码语言:javascript
复制
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})

然后,以下两个查询都可以使用该索引:

代码语言:javascript
复制
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})

因此,查询中条件的排序不会阻止索引的使用--我认为这就是您要问的问题。

您可以通过尝试shell中的两个查询并在查找后添加.explain()来轻松地测试这一点。我这样做只是为了确认,它们都显示使用了复合索引。

但是,如果运行以下查询,则不会使用索引,因为不会对FieldA进行查询:

代码语言:javascript
复制
db.MyCollection.find({FieldB : "B"})

因此,是索引中字段的顺序定义了它是否可以被查询使用,而不是查询本身中字段的顺序(这就是Lucas所指的)。

票数 47
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5245737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档