考虑以下情况:
100%的时间,我的查询将包括a在查询中,有时还包括b。
90%的查询将是:
{a:"somevalue"}百分之十将会是
{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"
}发布于 2014-09-28 13:42:37
手册有话要说;
如果有一个集合对{ a: 1,b: 1 }具有复合索引,以及包含该索引前缀(即{ a: 1 } )的索引,那么可以删除{ a: 1}索引。MongoDB将能够在所有使用{ a: 1}索引的情况下使用复合索引。
换句话说,使用单个索引很可能获得同样好或更好的性能,因为MongoDB不必在内存中缓存两个索引,也不必在每次插入时更新两个单独的索引。
https://stackoverflow.com/questions/26085376
复制相似问题