仅在部分查询中使用mongoDB索引

时间:2013-02-26 10:42:41

标签: mongodb indexing querying

我有以下情况:

  • 我有一个包含
  • 等文档的集合
{a: 1, b: 'some string', c: 5, d: 7 }
{a: 2, b: 'some another string', c: 5, d: 8 }
{a: 3, b: 'yet another string', c: 5, d: 9 }
  • 我允许用户使用自定义查询进行搜索,因此有时我可以搜索:
{a: 2, c:5}
{c:5, d:8}
  • 一些使用过的字段是强制性的(例如c)
  • 我考虑过为c设置索引,以便查询更快,当我这样做时:
  

db.my_collection.find({C:5})

效果很好,但是当我发布时:

  

db.my_collection.find({C:5,d:8})

当使用索引时,它会消耗相同的时间:(

所以我的问题是:是否可以设置某种部分索引,因此查询首先会在具有索引的键内搜索,而不是在那些需要它们的内部?

1 个答案:

答案 0 :(得分:0)

我的原始答案不准确,我没有正确阅读。

  

所以我的问题是:是否可以设置某种部分索引,因此查询首先会在具有索引的键内搜索,而不是在那些需要它们的内部?

MongoDB已经这样做但你可能在d的选择性,格式和大小以及整个文档方面存在问题。

即使MongoDB已经通过索引过滤了c,它也需要ScanObjects实际数据,在文档中进行分页。

d的选择性可能会导致您从c子句返回大量文档并导致对d进行大量扫描。

因此,这些因素可能会使您的查询变慢。

解决这个问题的最佳方法是在这里不使用部分索引,而只是制作一个完整的复合索引。