我有以下情况:
{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}
db.my_collection.find({C:5})
效果很好,但是当我发布时:
db.my_collection.find({C:5,d:8})
当使用索引时,它会消耗相同的时间:(
所以我的问题是:是否可以设置某种部分索引,因此查询首先会在具有索引的键内搜索,而不是在那些需要它们的内部?
答案 0 :(得分:0)
我的原始答案不准确,我没有正确阅读。
所以我的问题是:是否可以设置某种部分索引,因此查询首先会在具有索引的键内搜索,而不是在那些需要它们的内部?
MongoDB已经这样做但你可能在d
的选择性,格式和大小以及整个文档方面存在问题。
即使MongoDB已经通过索引过滤了c
,它也需要ScanObjects
实际数据,在文档中进行分页。
d
的选择性可能会导致您从c
子句返回大量文档并导致对d
进行大量扫描。
因此,这些因素可能会使您的查询变慢。
解决这个问题的最佳方法是在这里不使用部分索引,而只是制作一个完整的复合索引。