MST
星途 面试题库

面试题:MongoDB索引使用技巧之复合索引查询性能调优

在MongoDB中,假设我们有一个集合,包含字段`name`、`age`和`score`,如果我们经常需要按照`name`和`age`进行联合查询,应该如何创建复合索引以优化查询性能?请写出创建索引的语句,并解释复合索引的工作原理。
23.2万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
  1. 创建索引语句
    db.yourCollectionName.createIndex({name: 1, age: 1});
    
    在上述语句中,yourCollectionName需替换为实际的集合名称。{name: 1, age: 1}表示按照name字段升序,然后在name相同的情况下再按照age字段升序创建复合索引。如果想降序,可以把1改为-1
  2. 复合索引工作原理
    • 复合索引是由多个字段组成的索引。在MongoDB中,复合索引会按照定义索引时字段的顺序来组织数据。以{name: 1, age: 1}为例,MongoDB首先会按照name字段对文档进行排序,然后在每个name值内部,再按照age字段对文档进行排序。
    • 当进行查询时,如果查询条件的字段顺序与复合索引定义的字段顺序一致(或者是前缀匹配,即查询条件包含复合索引前面部分的字段),MongoDB可以利用该复合索引快速定位到符合条件的文档。例如查询{name: "John", age: 30},MongoDB可以直接在复合索引中先定位到nameJohn的文档,然后在这些文档中再筛选出age30的文档,从而大大提高查询性能。如果查询条件是{age: 30},则该复合索引无法有效利用,因为age字段不是复合索引的前缀字段。