有关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在幕后以这种方式运作?
答案 0 :(得分:1)
否,查询中字段的顺序无关紧要。
此外,由于查询字段被隐式“和”,因此它们也等同于:
db.getCollection('files').find( {
'status': { '$in': [ 12, 6 ] },
'name': 'someFileName.csv'
})
和
db.getCollection('files').find( {
'name': 'someFileName.csv',
'status': { '$in': [ 12, 6 ] }
})
在确定执行查询的最佳方式时,查询分析器将它们全部相同。