在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个博客中)。因此,选择"最缩小的"索引,不管子句顺序? 非常感谢。
答案 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总是会选择最佳索引。