我有一个这样的模式:
{
name: string,
age: number,
marks: number
}
字符串
我有一个name
和age
字段的复合索引。“
{ name: 1, age: 1}
型
如果我有这样的查询:
collection.find({ name: 'X', age: 10, marks: 100 })
型
姓名和年龄的索引是否有助于mongo优化查询?
如果我有一个关于标记{ marks: 1 }
的单独索引,它现在能工作吗?
或者我需要在所有三个上都有复合索引才能让它工作在{ name: 1, age: 1, marks: 1 }
上吗?
1条答案
按热度按时间6jjcrrmo1#
name and age
上的{ name: 1, age: 1 }
索引将首先缩小搜索文档的范围,但它仍需要扫描那些匹配的文档,以找到标记等于100的文档marks
上的单独{ marks: 1 }
索引将首先缩小搜索文档的范围,但它仍需要扫描那些匹配的文档,通过过滤姓名和年龄来找到那些文档{ name: 1, age: 1, marks: 1 }
这个索引可以完全覆盖查询。MongoDB可以有效地使用这个索引来基于所有三个字段进行过滤:姓名年龄和分数不需要采集扫描所以要回答你的问题,你需要对这三个都进行复合索引。我希望这能解决你的问题