这个问题涉及到管理索引和搜索Bson文档的内部方法。
当你创建像"index1","index2",“index3”这样的多个索引时,...the索引会被存储起来,以便在查询时使用,但是查询的顺序和产生的性能又如何呢?
示例
index1,index2,index3 ->以相同顺序查询index1,index2,index3 (最佳情况) index1,index2,index3->以另一顺序查询index2,index1,index3(顺序已更改)
您经常使用嵌套查询,包括这3个索引和其他项或更多索引。查询的顺序将意味着一些时间的损失?传递关于所定义的索引顺序或内部架构的查询是否必须关注此顺序搜索?我想知道我是否真的关心这一点,或者是否可以让我在自由中的查询更多。
谢谢。
发布于 2011-03-09 21:09:34
查询中条件的顺序不会影响它是否可以使用索引。
例如典型的文档结构:
{
"FieldA" : "A",
"FieldB" : "B"
}
如果您在A和B上有一个复合索引:
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})
然后,以下两个查询都可以使用该索引:
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})
因此,查询中条件的排序不会阻止索引的使用--我认为这就是您要问的问题。
您可以通过尝试shell中的两个查询并在查找后添加.explain()
来轻松地测试这一点。我这样做只是为了确认,它们都显示使用了复合索引。
但是,如果运行以下查询,则不会使用索引,因为不会对FieldA进行查询:
db.MyCollection.find({FieldB : "B"})
因此,是索引中字段的顺序定义了它是否可以被查询使用,而不是查询本身中字段的顺序(这就是Lucas所指的)。
https://stackoverflow.com/questions/5245737
复制相似问题