使用带有多个索引数组字段值的$ in时,对MongoDB的查询速度慢

时间:2015-11-18 19:05:24

标签: mongodb

使用带有多个索引数组字段值的$ in时,对MongoDB的查询速度慢。

1)数组中1个元素的查询速度很快(<15 ms)

db.collection.count ( { tag : { $in : [ 1 ] } })

我重复了对“tag”的所有值的查询,并且所有查询都很快。

i = 1; while (i < 1000) { 
db.collection.count( { tag : { $in : [ i ] } }); 
i++; 
}

2)具有2个或更多元素的查询缓慢(> 1m50s)

db.collection.count ( { tag : { $in : [ 1, 2, 3 ] } } )

一些信息:

  • MongoDB 3.0.7
  • 笔记本i7,内存为8 GB(mongodb使用2 GB),HDD
  • Linux + Docker
  • StorageEngine MMAP
  • 收集50M文件(测试目的)
  • 使用以下命令创建索引:db.collection.createIndex({tag:1})

1 个答案:

答案 0 :(得分:0)

MongoDB使用COUNT_SCAN作为$ in数组中的一个值,使用FETCH获取$ in数组内的多个值。这是MongoDB中使用$ in运算符进行覆盖计数查询的错误。