这个问题涉及管理索引和编写Bson文档的内部方法.
当您创建多个索引(如"index1","index2","index3"...)时,将存储索引以在查询期间使用,但查询顺序和结果如何.
示例
index1,index2,index3 ---->查询顺序相同index1,index2,index3(最佳情况)index1,index2,index3 ---->查询另一个顺序index2,index1,index3(修改顺序)
很多时候您使用嵌套查询,包括这3个索引和其他项或更多索引.查询的顺序会导致一些时间丢失?必须传递关于定义的索引顺序的查询或内部架构是否关注此订单搜索?我想知道我是否注意到这一点,或者可以自由地提出自己的疑问.
谢谢.
Ada*_*Dev 41
查询中条件的顺序不会影响它是否可以使用索引或不使用索引.
例如典型的文件结构:
{
"FieldA" : "A",
"FieldB" : "B"
}
Run Code Online (Sandbox Code Playgroud)
如果A和B上有复合索引:
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})
Run Code Online (Sandbox Code Playgroud)
然后,以下两个查询都将能够使用该索引:
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})
Run Code Online (Sandbox Code Playgroud)
因此,查询中条件的排序不会阻止使用索引 - 我认为这是您要问的问题.
您可以通过在shell中尝试2个查询并.explain()在查找后添加来轻松地对此进行测试.我这样做是为了证实,他们都表明使用了复合指数.
但是,如果运行以下查询,则不会使用索引,因为未查询FieldA:
db.MyCollection.find({FieldB : "B"})
Run Code Online (Sandbox Code Playgroud)
因此,它是索引中字段的顺序,用于定义查询是否可以使用它,而不是查询本身中字段的顺序(这是Lucas所指的).
Luc*_*lis 11
来自http://www.mongodb.org/display/DOCS/Indexes:
如果您在多个字段上有复合索引,则可以使用它来查询字段的起始子集.所以如果你有一个索引
A,B,C
你可以使用它查询
一个
A,B
A,B,C
所以是的,订单很重要.如果您需要更精确的答案,您应该稍微澄清一下您的问题.
| 归档时间: |
|
| 查看次数: |
9016 次 |
| 最近记录: |