如果MongoDB中只有查询字段的前缀被索引,索引是否有效?

pkwftd7m  于 2023-08-04  发布在  Go
关注(0)|答案(1)|浏览(102)

我有一个这样的模式:

{
   name: string,
   age: number,
   marks: number
}

字符串
我有一个nameage字段的复合索引。“

{ name: 1, age: 1}


如果我有这样的查询:

collection.find({ name: 'X', age: 10, marks: 100 })


姓名和年龄的索引是否有助于mongo优化查询?
如果我有一个关于标记{ marks: 1 }的单独索引,它现在能工作吗?
或者我需要在所有三个上都有复合索引才能让它工作在{ name: 1, age: 1, marks: 1 }上吗?

6jjcrrmo

6jjcrrmo1#

  1. name and age上的{ name: 1, age: 1 }索引将首先缩小搜索文档的范围,但它仍需要扫描那些匹配的文档,以找到标记等于100的文档
  2. marks上的单独{ marks: 1 }索引将首先缩小搜索文档的范围,但它仍需要扫描那些匹配的文档,通过过滤姓名和年龄来找到那些文档
  3. { name: 1, age: 1, marks: 1 }这个索引可以完全覆盖查询。MongoDB可以有效地使用这个索引来基于所有三个字段进行过滤:姓名年龄和分数不需要采集扫描
    所以要回答你的问题,你需要对这三个都进行复合索引。我希望这能解决你的问题

相关问题