MongoDB中化合物索引搜索的优化算法


Algorithm for optimising compound index search in MongoDb

>我有一个集合X,我必须在其上应用过滤器。

筛选器

另存为单独的实体(集合筛选器(,它保存的唯一数据是字段名称和应用于该字段名称的条件

过滤器示例:

姓名是斯蒂芬,年龄在10,20之间

基本上,我必须改进的是,过滤器中的每个字段都是创建过滤器时添加的索引。

唯一匹配的结构是筛选字段上的复合索引。

总之,问题是当我有一个过滤器时:

姓名是斯蒂芬,年龄在10,20之间

我在MongoDb中的复合索引将是:{'Name':1,'Age':1}

但是,如果我添加另一个过滤器,假设:年龄是 10 岁,名字是阿德里安,身高在 170,180 之间

复合指数为: {'年龄':1,'姓名':1

, '身高':1}

{'Name':1,'Age':1} <> {'Age':1,'Name':1

, 'Height':1}

我该怎么做才能使最后一个索引与第一个索引相适应,反之亦然。

如果我没有去过明确,请告诉我。

这个问题最干净的解决方案是索引交集,目前正在开发中。这样,每个标准的索引就足够了。

同时,我看到两个选项:

  1. 使用单独的搜索数据库,根据您的条件返回相关 ID,然后在 MongoDB 中使用 $in 查询实际文档。有许多工具使用这种方法,但它增加了相当多的开销,因为您需要针对第二个数据库进行编码和管理,保持数据同步等。
  2. 使用复合索引和"无限范围查询"的智能组合。例如,您可以争辩说,在 (0, 200( 范围内的年龄查询不会从结果集中丢弃任何人,0 到 400 之间的高度查询也不会。

这可能不是最干净的方法,其效率在很大程度上取决于查询的详细信息,因此可能需要进行一些微调。