MST

星途 面试题库

面试题:MongoDB中复合索引的使用场景及性能影响

在MongoDB里,复合索引是如何工作的?请举例说明在哪些场景下使用复合索引能显著提升查询性能,以及使用不当可能会对性能造成怎样的负面影响。
41.6万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

复合索引的工作原理

复合索引是在多个字段上创建的索引。MongoDB会按照索引字段的顺序对文档进行排序存储。例如,创建一个复合索引{field1: 1, field2: 1},MongoDB首先按field1排序,在field1值相同的情况下,再按field2排序。查询时,如果查询条件的字段顺序与复合索引字段顺序一致(从左到右匹配),MongoDB可以利用该复合索引快速定位文档。

显著提升查询性能的场景

  1. 多字段精确匹配:例如电商系统中,查询特定品牌且特定价格区间的商品。假设商品集合有brandprice字段,创建复合索引{brand: 1, price: 1},查询{brand: "Apple", price: {$gte: 1000, $lte: 5000}},可利用索引快速定位。
  2. 范围查询结合前缀匹配:如博客系统中,查询特定作者且发布时间在某区间的文章。集合有authorpublishedAt字段,创建复合索引{author: 1, publishedAt: 1},查询{author: "John", publishedAt: {$gte: ISODate("2023-01-01T00:00:00Z"), $lte: ISODate("2023-12-31T23:59:59Z")}},索引可加速查询。

使用不当对性能的负面影响

  1. 索引字段顺序错误:若创建复合索引{field2: 1, field1: 1},但查询常用{field1: "value1", field2: "value2"},由于不符合从左到右匹配原则,索引无法有效利用,查询性能可能严重下降。
  2. 过多复合索引:每个复合索引都会占用额外磁盘空间和内存,且每次插入、更新或删除文档时,都要更新相关索引。过多复合索引会导致存储成本增加,写入性能大幅下降。