0

考虑以下场景:

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"
}
4

1 回答 1

2

手册中有这样说;

如果您有一个在 { a: 1, b: 1 } 上具有复合索引的集合,以及由该索引的前缀组成的索引,即 { a: 1 },假设没有一个索引具有稀疏或唯一约束,那么您可以删除 { a: 1 } 索引。

MongoDB 将能够在它使用 { a: 1 } 索引的所有情况下使用复合索引。

换句话说,您很可能使用单个索引获得相同或更好的性能,因为 MongoDB 不必在内存中缓存两个索引或在每次插入时更新两个单独的索引。

于 2014-09-28T13:42:37.667 回答