MST

星途 面试题库

面试题:MongoDB中部分索引的适用场景

请阐述在MongoDB中,部分索引适用于哪些具体场景,并举例说明如何创建和使用部分索引以优化查询性能。
16.8万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

部分索引适用场景

  1. 稀疏数据场景:当集合中的文档某些字段存在大量缺失值时,创建普通索引会浪费空间且影响性能。例如在一个用户信息集合中,部分用户可能没有填写“爱好”字段,如果为“爱好”字段创建普通索引,会为每个文档在索引中占用空间,而部分索引仅会对存在“爱好”字段的文档创建索引,节省空间。
  2. 特定条件过滤场景:如果查询总是基于特定条件,比如查询状态为“已完成”的订单记录。通过创建基于“状态 = 已完成”条件的部分索引,可显著提高这类查询性能,而不会像普通索引那样对所有文档进行索引。

创建部分索引示例

假设我们有一个名为orders的集合,包含order_statusorder_amount字段。我们想为状态为“已完成”的订单创建部分索引,以优化对这类订单金额的查询。

db.orders.createIndex(
    { order_amount: 1 },
    { partialFilterExpression: { order_status: "已完成" } }
);

在上述代码中,{ order_amount: 1 }指定了要索引的字段是order_amountpartialFilterExpression指定了部分索引的过滤条件,只有满足order_status为“已完成”的文档才会被索引。

使用部分索引优化查询示例

继续以上面的orders集合为例,当我们查询状态为“已完成”且订单金额大于100的订单时,部分索引就能发挥作用。

db.orders.find({
    order_status: "已完成",
    order_amount: { $gt: 100 }
});

由于我们创建了基于order_status为“已完成”条件的部分索引,这个查询在扫描索引时只需遍历满足条件的文档索引,从而提高了查询性能。