面试题答案
一键面试创建复合索引
在MongoDB中,可以使用createIndex
方法来创建复合索引。语法如下:
db.collection.createIndex( { <field1>: <type1>, <field2>: <type2>, ... } )
例如,在一个名为users
的集合上,对name
和age
字段创建复合索引:
db.users.createIndex( { name: 1, age: 1 } )
这里1
表示升序,-1
表示降序。
适用业务场景
- 多条件查询:当经常需要基于多个字段进行查询时,复合索引能显著提升查询性能。比如在电商系统中,经常需要根据商品类别和价格范围来查询商品,此时对
category
和price
字段创建复合索引就很有用。 - 排序:如果查询结果需要按照多个字段排序,复合索引能加速排序操作。例如,在博客系统中,查询文章时可能需要按照发布时间和点赞数进行排序,对
published_at
和likes
字段创建复合索引可提升性能。
复合索引字段顺序对查询性能的影响
复合索引字段顺序非常关键。MongoDB的复合索引是有序的,查询时只有当查询条件按照索引字段顺序开始匹配时,索引才能有效利用。
例如,有复合索引{ name: 1, age: 1 }
:
- 查询
db.users.find({ name: "John", age: 30 })
能有效利用索引,因为查询条件顺序与索引字段顺序一致。 - 但查询
db.users.find({ age: 30, name: "John" })
则无法充分利用该索引,因为字段顺序不匹配,性能会降低。如果查询经常是基于age
字段开始,那么应该创建{ age: 1, name: 1 }
这样顺序的复合索引。