考虑以下场景:
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"
}
或者添加第二个索引只满足上的查询,我会从中受益吗
{
"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"
}
手册中有这样一句话;
如果您的集合在{a:1,b:1}上有一个复合索引,以及一个由该索引前缀组成的索引,即{a:1},假设该索引都没有稀疏或唯一约束,则可以删除{a:1}索引。
MongoDB将能够在所有使用{a:1}索引的情况下使用复合索引
换句话说,使用单个索引很可能会获得同样好或更好的性能,因为MongoDB不必在内存中缓存两个索引,也不必在每次插入时更新两个单独的索引。