使用$和运算符

时间:2017-05-26 12:08:10

标签: mongodb performance

我正在运行不同的查询:

按geoJsonExtent过滤,它是一个5点的多边形。

db.Zone.find({ 
    "geoJsonExtent": { "$geoIntersects": { "$geometry": { "type": "Point", "coordinates": [ -103.342280, 20.671379 ] } } }  
}).explain("executionStats");

"executionSuccess" : true,
"executionTimeMillis" : 0,
"nReturned" : 7,
"totalDocsExamined" : 10,
"totalKeysExamined" : 19

通过geoJson过滤,它是一个多点,有n个点(数百个)。

db.Zone.find({ 
    "geoJson": { "$geoIntersects": { "$geometry": { "type": "Point", "coordinates": [ -103.342280, 20.671379 ] } } }, 
}).explain("executionStats");

"executionSuccess" : true,
"executionTimeMillis" : 2,
"nReturned" : 4,
"totalDocsExamined" : 6,
"totalKeysExamined" : 16

使用和运算符对两个查询进行过滤。

db.Zone.find({ 
    "geoJsonExtent": { "$geoIntersects": { "$geometry": { "type": "Point", "coordinates": [ -103.342280, 20.671379 ] } } },
    "geoJson": { "$geoIntersects": { "$geometry": { "type": "Point", "coordinates": [ -103.342280, 20.671379 ] } } }, 
}).explain("executionStats");

"executionSuccess" : true,
"executionTimeMillis" : 22,
"nReturned" : 4,
"totalDocsExamined" : 6,
"totalKeysExamined" : 16

我有geoJson和geoJsonExtent的2dsphere索引。

最后一个查询是最慢的(22ms),但$和运算符使用短路评估,因此最后一个查询必须比第二个查询更快,因为de first first几乎是立即的。

有人知道为什么会这样吗?

0 个答案:

没有答案