gpt4 book ai didi

mongodb - 如果有多个包含相同字段的索引,将使用哪个索引?

转载 作者:可可西里 更新时间:2023-11-01 09:59:09 25 4
gpt4 key购买 nike

例如,一个find() 包含一个字段ab,顺序是这样的。例如,

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 会使用第一个键,因为它更准确地匹配查询,还是随机选择两个键中的任何一个,因为它们都可以工作?

最佳答案

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 的查询, ababc ,但只有bc , 或者只有 bc .

关于mongodb - 如果有多个包含相同字段的索引,将使用哪个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24720412/

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