MST

星途 面试题库

面试题:MongoDB索引标识对查询性能的影响及优化

阐述MongoDB索引标识(如唯一索引标识、稀疏索引标识等)是如何影响查询性能的。当查询性能不佳时,基于索引标识应如何进行针对性的优化?请结合具体案例说明。
45.6万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

1. 索引标识对查询性能的影响

  • 唯一索引标识
    • 影响:唯一索引确保索引字段的值唯一。在插入数据时,数据库需要额外检查唯一性,这可能会增加写操作的开销。但在查询时,如果查询条件涉及唯一索引字段,查询性能会显著提升,因为数据库可以快速定位到唯一匹配的记录,减少了扫描的数据量。例如,在用户表中对“身份证号”字段建立唯一索引,当根据身份证号查询特定用户时,数据库能直接定位到对应记录,无需遍历大量数据。
  • 稀疏索引标识
    • 影响:稀疏索引只对有值的文档建立索引。对于包含大量缺失值的字段建立稀疏索引,可大幅减少索引占用的空间。在查询时,如果查询条件主要针对有值的文档,稀疏索引能够提高查询效率,因为它跳过了无值文档的索引记录,减少了索引扫描范围。例如,在一个产品表中,部分产品可能没有“特殊说明”字段值,对“特殊说明”字段建立稀疏索引,在查询有特殊说明的产品时,可快速定位到相关记录。

2. 查询性能不佳时基于索引标识的优化

  • 唯一索引标识优化
    • 案例:假设在电商订单表中,“订单编号”字段设置为唯一索引,但查询某个用户的所有订单时性能不佳。此时可以检查是否对“用户ID”字段建立了索引,如果没有,可创建一个复合索引,如{用户ID: 1, 订单编号: 1}。这样在查询某个用户的订单时,数据库可以利用复合索引快速定位到相关订单,同时保留订单编号的唯一性约束。
  • 稀疏索引标识优化
    • 案例:在一个博客文章表中,部分文章没有“关键词”字段值,对“关键词”字段建立了稀疏索引。但在查询包含特定关键词的文章时性能不理想。可以考虑检查查询条件是否合理,是否需要在其他相关字段(如“文章分类”)上建立联合稀疏索引,比如{文章分类: 1, 关键词: 1},以缩小查询范围,提高查询性能。同时,确保查询语句正确利用了稀疏索引,避免全表扫描。