Mongo索引详细

时间:2012-08-20 08:34:40

标签: mongodb mongodb-indexes

我有mongo db集合,如下所示

collection {
   X: 1,
   Y: 2,
   Z: 3,
   T_update: 123,
   T_publish: 243,
   T_insert: 342
}

我必须创建一个像

这样的索引
{X: 1, Y: 1, Z: 1, T_update: 1}
{X: 1, Y: 1, Z: 1, T_publish: 1}
{X: 1, Y: 1, Z: 1, T_insert: 1}

但我看到的是值X:1,Y:1,Z:1将导致冗余,并且我打算用于排序的时间参数正在发生变化。有没有更好的方法来创建上面的索引,这样我就不会创建三个单独的索引。

另外说如果我有索引

{X: 1, Y: 1, Z: 1, T_update: 1}

我希望Mongo返回结果,使x = 5,y =任意值,Z = 4,sort = T_update 以上索引是否有用,或者我应该创建一个索引,如

{X:1, Z:1, T_update: 1},

我希望我能避免它。

1 个答案:

答案 0 :(得分:2)

这里的答案将取决于您要编制索引的字段的选择性 - 如果您将用于过滤X,Y或Z的标准不是非常有选择性,那么它们基本上可以省略(或移动到复合键的权利。)

假设您使用的过滤器Y不等于1,其中1是稀有值。由于您将遍历几乎整个索引以返回大多数值,并且扫描数据,因此在Y上建立索引将比首先获得排序索引的好处少。鉴于这种情况,如果在T_Update上进行排序,那么拥有像{T_update: 1, Y : 1}这样的索引可能会有所帮助。

最后,就最有效的索引方式而言,这里有很多很多的排列。确定数据集最佳索引的真正方法是使用explain()hint()来测试具有特定查询模式和数据集的各种索引。