以 find()
为例,它按顺序涉及字段 a
和 b
。例如,
db.collection.find({'a':{'$lt':10},'b':{'$lt':5}})
我的集合索引数组中有两个键:
[
{
"v" : 1,
"key" : {
"a" : 1,
"b" : 1
},
"ns" : "x.test",
"name" : "a_1_b_1"
},
{
"v" : 1,
"key" : {
"a" : 1,
"b" : 1,
"c" : 1
},
"ns" : "x.test",
"name" : "a_1_b_1_c_1"
}
]
是否保证 mongo 将使用第一个 key ,因为它更准确地匹配查询,或者它是否随机选择两个 key 中的任何一个,因为它们都可以工作?
最佳答案
MongoDB 有一个查询优化器,它会选择最有效的索引。来自 docs :
The MongoDB query optimizer processes queries and chooses the most efficient query plan for a query given the available indexes.
所以这并不能得到严格保证(但我预计较小的索引会比较大的复合索引更快地产生结果)。 您还可以使用hint运算符强制查询优化器使用指定的索引。
db.collection.find({'a':{'$lt':10},'b':{'$lt':5}}).hint({a:1, b:1});
但是,您的示例中的这两个索引是多余的。这是因为复合索引支持对任意prefix of index的查询。字段。
以下索引:
db.collection.ensureIndex({a: 1, b: 1, c: 1});
可以支持包含a
、a
和b
以及a
和b
的查询code> 和 c
,但不只有 b
或 c
,或者只有 b
和c
。
关于mongodb - 如果有多个索引包含相同的字段,会使用哪个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24720412/