MongoDb中复合索引搜索的优化算法

时间:2013-10-01 08:22:19

标签: php mongodb mongodb-php nosql

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

过滤器保存为sepparate实体(集合过滤器),其唯一的数据是字段名称条件已应用到该字段名称

过滤器示例:

名字是Stephan和年龄10,20岁

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

匹配的唯一结构是已过滤字段的复合索引。

总之,问题在于我有一个像:

这样的过滤器

名字是斯蒂芬和年龄10,20

我在MongoDb中的复合索引将是:{'姓名':1,'年龄':1}

但是,如果我添加另一个过滤器,让我们说:年龄是10,名字是阿德里安和高度在170,180之间

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

{'姓名':1,'年龄':1}<> {'年龄':1,'姓名':1,'身高':1}

我可以做些什么来使最后一个索引适合第一个和另一个方式。

如果我没有明确表示,请告诉我。

1 个答案:

答案 0 :(得分:1)

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

与此同时,我看到两个选择:

  1. 使用单独的搜索数据库根据您的条件返回相关ID,然后使用MongoDB中的$in查询实际文档。有许多工具使用这种方法,但它增加了相当多的开销,因为您需要编写代码并管理第二个数据库,保持数据同步等。
  2. 使用复合索引和“无限范围查询”的智能组合。例如,您可以争辩说,对于年龄范围为(0,200)的查询不会丢弃结果集中的任何人,也不会丢弃0到400之间的高度查询。
  3. 这可能不是最干净的方法,其效率在很大程度上取决于查询的细节,因此可能需要进行一些微调。