mongodb AND条款的顺序

时间:2014-06-22 11:05:21

标签: mongodb

在mongodb上运行AND查询时,是否对子句的顺序有任何性能影响? 我的测试似乎表明“没有”,但我想知道我是否遗漏了一些东西,因为我看到了相反的文章。

E.g。考虑一些博客'文件:

{_id:1, type:'personal',   author:'Mr A',  ...}
{_id:2, type:'commercial', author:'Mr A',  ...}
{_id:3, type:'personal',   author:'Mr B',  ...}
{_id:4, type:'commercial', author:'Mr B',  ...}
{_id:5, type:'personal',   author:'Mr C',  ...}
{_id:6, type:'commercial', author:'Mr C',  ...}
{_id:7, type:'personal'  , author:'Mr D',  ...}
{_id:8, type:'commercial', author:'Mr D',  ...}

With indexes:
   col.ensureIndex({type:1})
   col.ensureIndex({author:1})

现在我可以使用不同的顺序运行AND查询:

col.find({type:'commercial', author:'Mr A'})
col.find({author:'Mr A' , type:'commercial' })

我试过跑步'解释'并且给人的印象是需要“作者”这样的作品。索引无论顺序如何(因为" A先生和#34;只有两个博客,而#34;商业"出现在4个博客中)。因此,选择"最缩小的"索引,不管子句顺序? 非常感谢。

2 个答案:

答案 0 :(得分:1)

如果您查询多个字段,请考虑使用复合索引。

db.col.ensureIndex( { "type": 1, "author": 1 } )

查找文档:http://docs.mongodb.org/manual/core/index-compound/

  

复合索引中字段的顺序非常重要。在   在前面的示例中,索引将包含对文档的引用   首先按项目字段的值排序,并在每个值的范围内排序   项目字段,按库存字段的值排序。请参阅排序顺序   了解更多信息。

答案 1 :(得分:0)

  

选择“缩小范围”的索引是一个记录在案的功能,   不管条款顺序如何?

是的,MongoDB总是会尝试使用能够带来最佳效果的索引。当您执行查询时,MongoDB使用查询优化器:

  

MongoDB查询优化器处理查询并选择最多   给定可用索引的查询的有效查询计划。该   查询系统然后在每次查询运行时使用此查询计划。

当您运行没有query plan的查询时,MongoDB将创建一个新查询。要创建查询计划,MongoDB将为多个候选索引并行运行多个查询。然后,所选索引将用于具有相同查询模式的所有后续查询中。

您可以在MongoDB文档中阅读有关query plans的更多详细信息。

另外,仅供您参考,如果您知道要在查询中使用哪个索引,则可以使用hint游标方法指定一个索引。

col.find({type:'commercial', author:'Mr A'}).hint({ author : 1});
  

在mongodb上运行AND查询时,是否有任何性能影响   条款的顺序?

两个字段上有两个单独的索引顺序无关紧要,因为MongoDB总是会选择最佳索引。