MST

星途 面试题库

面试题:MongoDB高基数与低基数索引的优化策略

假设在一个MongoDB集合中有高基数字段和低基数字段,为了优化查询性能,在创建索引时应分别采取什么策略?请举例说明如何针对不同基数字段设计复合索引以提升查询效率。
42.2万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

高基数字段索引策略

  • 单独索引:高基数字段具有大量不同的值,适合创建单独的索引。例如,在一个存储用户信息的集合中,email字段通常是高基数的(每个用户的邮箱基本不同),可以为email字段创建单独索引。
db.users.createIndex( { email: 1 } );
  • 复合索引的前置字段:当需要创建复合索引时,高基数字段应放在复合索引的前面。例如,如果经常根据emailstatus进行查询,email是高基数字段,status是低基数字段,复合索引应设计为{ email: 1, status: 1 }。这样,MongoDB在查询时可以利用高基数email字段的索引快速定位到较小的数据子集,然后再根据status进行过滤。

低基数字段索引策略

  • 复合索引后置:低基数字段值的种类较少,单独使用时索引效率不高。通常将其放在复合索引的后面。例如,在上述用户集合中,status字段(可能只有“active”、“inactive”等几个值)是低基数字段,在与email创建复合索引时放在后面,如{ email: 1, status: 1 }
  • 组合其他字段:可以与其他高基数字段或有区分度的字段组合成复合索引,提高索引的有效性。比如在一个订单集合中,order_type是低基数字段(如“online”、“offline”),order_id是高基数字段,可创建复合索引{ order_id: 1, order_type: 1 } ,在查询订单时,如果根据order_idorder_type过滤,先通过order_id快速定位,再通过order_type进一步筛选。