1

我有 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},

我希望我能避免它。

4

1 回答 1

2

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

假设您正在使用 Y 不等于 1 之类的过滤器,其中 1 是一个稀有值。由于您将遍历几乎整个索引以返回大部分值,并扫描数据,因此在 Y 上建立索引将比首先为排序建立索引带来的好处少。鉴于这种情况,如果在 T_Update 上进行排序,那么拥有如下索引可能是有益的:{T_update: 1, Y : 1}

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

于 2012-08-20T10:45:17.237 回答