考虑以下情况:
我的查询100%的时间都会在查询中包含 a ,有时还会 b 。
90%的查询将是:
{a:"somevalue"}
和10%它将是
{a:"somevalue",b:"somevalue"}
仅使用复合索引(如果有)满足此要求的缺点是什么?,如下所示:
{
"v" : 1,
"key" : {
"a" : 1,
"b" : 1
},
"name" : "a_1_b_1",
"ns" : "foo.bar"
}
或者我会从添加仅满足 a
的查询的第二个索引中受益{
"v" : 1,
"key" : {
"a" : 1,
"b" : 1
},
"name" : "a_1_b_1",
"ns" : "foo.bar"
},
{
"v" : 1,
"key" : {
"a" : 1
},
"name" : "a_1",
"ns" : "foo.bar"
}
答案 0 :(得分:2)
The manual有这个说法;
如果你的集合在{a:1,b:1}上有一个复合索引,以及一个由该索引的前缀组成的索引,即{a:1},假设没有索引具有稀疏或唯一约束,然后您可以删除{a:1}索引。
MongoDB将能够在所有使用{a:1}索引的情况下使用复合索引。
换句话说,您最有可能使用单个索引获得更好或更好的性能,因为MongoDB不必在内存中缓存两个索引或在每个插入时更新两个单独的索引。