mongodb计算索引与索引相交

mongodb计算索引与索引相交,mongodb,mongodb-indexes,Mongodb,Mongodb Indexes,将有大约30亿个文档在碎片的集合中。 假设我使用的查询不是完全由索引完成的。 我没有用钥匙来分类 有如下索引(与查询匹配)有意义吗 或: 这是一个正确的问题。您没有使用这些键进行排序,因此我假设您的查询不包含排序,因为您必须知道(要说您所做的),索引跨节不能跨排序工作 我想说:最好有复合索引 尽管需要维护更多的索引,但它可以直接回答您的查询,而不需要进行跨节所需的有问题的计算。我的意思是,你在35亿美元的记录上这么做,结果不会好的 复合索引方法将维护的权重放在插入/更新端,这比查询端要好得多。即

将有大约30亿个文档在碎片的集合中。 假设我使用的查询不是完全由索引完成的。 我没有用钥匙来分类

有如下索引(与查询匹配)有意义吗

或:


这是一个正确的问题。您没有使用这些键进行排序,因此我假设您的查询不包含排序,因为您必须知道(要说您所做的),索引跨节不能跨排序工作

我想说:最好有复合索引

尽管需要维护更多的索引,但它可以直接回答您的查询,而不需要进行跨节所需的有问题的计算。我的意思是,你在35亿美元的记录上这么做,结果不会好的

复合索引方法将维护的权重放在插入/更新端,这比查询端要好得多。即使索引在任何给定时间点仅部分完成查询

MongoDB的交叉似乎更为先进:

通常,每个索引交叉点包含两个索引;但是,MongoDB可以使用多个/嵌套索引交叉点来解析查询

因此,即使它可以使用两个以上的索引,但使用3个交叉点仍然会导致出现嵌套交叉点,这听起来并不令人愉快


不久前,我确实回答了一个类似的问题,10gen曾说过,分段基本上是最后的手段,而不是可取的方法。

谢谢您的回答。我不知道交集将如何执行,因为(至少我假设)3个索引无论如何都会加载到内存中。所以理论上,我唯一要保存的就是一些磁盘。我正在处理一些仍然需要平衡的碎片,我认为索引会进一步降低平衡器的速度(当我重新启动它时)。(我没有很好地输入切分键数据分布,因此我可以更好地预分割数据块。你什么时候听说过10 gen?v2.4或v2.6?@MikeJavadi交集比内存中是否有索引要重得多。我的意思是,要进行交集,你必须对每个索引执行数组交集。)把他们带到地下室answer@MikeJavadi至于听它:它在评论中
{"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}