面试题答案
一键面试复合索引的工作原理
复合索引是在多个字段上创建的索引。MongoDB会按照索引字段的顺序对文档进行排序存储。例如,创建一个复合索引{field1: 1, field2: 1}
,MongoDB首先按field1
排序,在field1
值相同的情况下,再按field2
排序。查询时,如果查询条件的字段顺序与复合索引字段顺序一致(从左到右匹配),MongoDB可以利用该复合索引快速定位文档。
显著提升查询性能的场景
- 多字段精确匹配:例如电商系统中,查询特定品牌且特定价格区间的商品。假设商品集合有
brand
和price
字段,创建复合索引{brand: 1, price: 1}
,查询{brand: "Apple", price: {$gte: 1000, $lte: 5000}}
,可利用索引快速定位。 - 范围查询结合前缀匹配:如博客系统中,查询特定作者且发布时间在某区间的文章。集合有
author
和publishedAt
字段,创建复合索引{author: 1, publishedAt: 1}
,查询{author: "John", publishedAt: {$gte: ISODate("2023-01-01T00:00:00Z"), $lte: ISODate("2023-12-31T23:59:59Z")}}
,索引可加速查询。
使用不当对性能的负面影响
- 索引字段顺序错误:若创建复合索引
{field2: 1, field1: 1}
,但查询常用{field1: "value1", field2: "value2"}
,由于不符合从左到右匹配原则,索引无法有效利用,查询性能可能严重下降。 - 过多复合索引:每个复合索引都会占用额外磁盘空间和内存,且每次插入、更新或删除文档时,都要更新相关索引。过多复合索引会导致存储成本增加,写入性能大幅下降。