2

我有一个遵循这个“模式”的集合:

{
  _id: ObjectId,
  order: Number,
  fieldA: ObjectId,
  fieldB: Array[ObjectId]
}

和这样定义的索引:

{
  fieldA: 1,
  fieldB: 1,
  order: 1
}

运行这样的查找查询时:

{
  $and: [
    {fieldA: {$in: [{"$oid":"592edae196232608d00f78f5"},{"$oid":"592edadc96232608d00f5614"}]}},
    {fieldB: {$in:[{"$oid":"592edace96232608d00ef77f"},{"$oid":"592edacd96232608d00ef34b"}]}}
  ]
}

sort定义为

{
  order: 1
}

查询运行良好,索引覆盖查询,解释计划向我显示:

  • 4 次 IXSCAN
  • 1 SORT_MERGE
  • 1 取数

问题:如果我查询fieldA和/或fieldB使用巨大 $in的(我正在尝试进行连接之类的操作),则索引的作用不同,查询不被覆盖,排序是在内存中进行的,并且解释计划显示我 :

  • 1 IXSCAN
  • 1 取数
  • 1 SORT_KEY_GENERATOR
  • 1 排序

更糟糕的是,如果我从 Mongoose 运行此查询,排序操作会耗尽内存:/

4

0 回答 0