0

我有以下情况:

  • 我有一个包含文件的集合,例如
{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})

当没有索引时,它消耗相同的时间:(

所以我的问题是:是否可以设置某种部分索引,以便查询首先在具有索引的键中搜索,而不是在没有索引的键中搜索?

4

1 回答 1

0

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

所以我的问题是:是否可以设置某种部分索引,以便查询首先在具有索引的键中搜索,而不是在没有索引的键中搜索?

MongoDB 已经这样做了,但是您可能会在d整个文档的选择性、格式和大小方面遇到问题。

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

的选择性d可能会导致您从该子句返回大量文档c并导致对d.

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

通常解决这个问题的最好方法是在这里不使用部分索引,而只是创建一个完整的复合索引。

于 2013-02-26T10:55:54.277 回答