MST

星途 面试题库

面试题:MongoDB中复合索引的创建及使用场景

请说明在MongoDB中如何创建复合索引,并且阐述在哪些业务场景下使用复合索引会更有优势。举例说明复合索引字段顺序对查询性能的影响。
13.8万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

创建复合索引

在MongoDB中,可以使用createIndex方法来创建复合索引。语法如下:

db.collection.createIndex( { <field1>: <type1>, <field2>: <type2>, ... } )

例如,在一个名为users的集合上,对nameage字段创建复合索引:

db.users.createIndex( { name: 1, age: 1 } )

这里1表示升序,-1表示降序。

适用业务场景

  1. 多条件查询:当经常需要基于多个字段进行查询时,复合索引能显著提升查询性能。比如在电商系统中,经常需要根据商品类别和价格范围来查询商品,此时对categoryprice字段创建复合索引就很有用。
  2. 排序:如果查询结果需要按照多个字段排序,复合索引能加速排序操作。例如,在博客系统中,查询文章时可能需要按照发布时间和点赞数进行排序,对published_atlikes字段创建复合索引可提升性能。

复合索引字段顺序对查询性能的影响

复合索引字段顺序非常关键。MongoDB的复合索引是有序的,查询时只有当查询条件按照索引字段顺序开始匹配时,索引才能有效利用。 例如,有复合索引{ name: 1, age: 1 }

  • 查询db.users.find({ name: "John", age: 30 })能有效利用索引,因为查询条件顺序与索引字段顺序一致。
  • 但查询db.users.find({ age: 30, name: "John" })则无法充分利用该索引,因为字段顺序不匹配,性能会降低。如果查询经常是基于age字段开始,那么应该创建{ age: 1, name: 1 }这样顺序的复合索引。