跨碎片的收藏集中大约有30亿个文档。假设我将使用索引完全不完整的查询。而且我没有使用键进行排序。
拥有如下(与查询匹配的索引)是很有意义的:
{"sid":1, "cid":1, "mid":1}
{"cid":1, "hid":1, "mid":1}
{"mid":1, "hid":1, "sid":1}
{"hid":1, "sid":1, "cid":1, "mid":1}
{"mid":1, "cid":1}
{"mid":1, "sid":1}
或:
{sid:1}
{cid:1}
{hid:1}
{mid:1}
这是一个有效的问题。您没有使用这些键进行排序
我会说:最好拥有化合物索引。
即使维护它的索引更多的索引也可以直接回答您的查询,而无需进行分层的问题计算。我的意思是,您正在执行3.5B记录,这不会结束。
化合物索引方法将维护的重量放在插入/更新端,这比查询端要好得多。即使该索引仅在任何给定时间点部分完成查询。
似乎MongoDB的交叉点已经更加先进:
通常,每个索引相交涉及两个索引。但是,MongoDB可以使用多个/嵌套索引交叉点来解决查询。
http://docs.mongodb.org/manual/core/index-intersection/
因此,即使它可以使用两个以上的索引,但3个交叉点的使用仍然会导致嵌套交叉点发生,这听起来不愉快。
我确实在不久前回答了一个类似的问题,10GEN说,截面本质上是最后的度假胜地,而不是期望的。