参数顺序对Mongo查询性能有影响吗?

时间:2018-06-22 17:39:49

标签: mongodb performance

有关Mongo查询性能和查询参数顺序的一般问题。

我们有一个用于存储“文件”元数据的集合,其中包括文件名和文件状态(整数代码值)。集合中只有少数几个具有相同名称的文件(最多可能有几十个),但是可能有成千上万个具有相同状态的文件。

如果存在Mongo查询,其结构如下:

db.getCollection('files').find( { 
    '$and': [ 
        { 'name': 'someFileName.csv' },
        { 'status': { '$in': [ 12, 6 ] } } 
    ] 
})

...与相同格式的查询相比,它的执行方式是否会有所不同:

db.getCollection('files').find( { 
    '$and': [ 
        { 'status': { '$in': [ 12, 6 ] } }, 
        { 'name': 'someFileName.csv' }
    ] 
})

这是什么意思:$ and子句参数的顺序重要吗?从理论上说,文件名搜索将消除除少数记录以外的所有记录,因此方案1的性能是否会比方案2更好?还是Mongo在幕后以这种方式运作?

1 个答案:

答案 0 :(得分:1)

否,查询中字段的顺序无关紧要。

此外,由于查询字段被隐式“和”,因此它们也等同于:

db.getCollection('files').find( { 
    'status': { '$in': [ 12, 6 ] }, 
    'name': 'someFileName.csv'
})

db.getCollection('files').find( { 
    'name': 'someFileName.csv',
    'status': { '$in': [ 12, 6 ] }
})

在确定执行查询的最佳方式时,查询分析器将它们全部相同。