MST

星途 面试题库

面试题:MongoDB复合索引在复杂查询场景的应用

假设有一个存储用户信息的集合,包含字段有姓名(name)、年龄(age)、注册时间(registration_time),现在需要频繁执行按年龄范围查询以及按注册时间排序的操作,应如何设计复合索引?请说明原因以及可能存在的局限性。
30.4万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

复合索引设计

应该设计一个复合索引,顺序为 (age, registration_time)

原因

  1. 按年龄范围查询:复合索引的最左前缀原则,索引的最左列是 age,所以在进行按年龄范围查询时,索引能够有效利用,快速定位到符合年龄范围的记录。
  2. 按注册时间排序:在符合年龄范围的记录中,由于复合索引中第二列是 registration_time,数据库可以使用该索引直接对这些记录按注册时间排序,无需额外的排序操作。

局限性

  1. 插入、更新性能影响:索引会增加插入、更新操作的成本,因为每次数据变动都需要同时更新索引。
  2. 索引维护成本:复合索引占用更多的存储空间,需要更多的维护成本,包括索引重建、碎片整理等操作。
  3. 最左前缀限制:如果查询条件不包含 age 字段,这个复合索引将无法被使用,导致查询效率低下。例如只按注册时间查询,索引无法生效。