MST

星途 面试题库

面试题:MongoDB复合索引与$运算符的协同优化

假设有一个集合,文档结构为{ 'name': 'string', 'age': 'number', 'score': 'number' },现在需要频繁查询年龄大于30岁且分数在80到90之间的记录,应该如何设计复合索引来配合$gt、$gte、$lte这些$运算符,以达到最佳查询性能?请详细说明索引设计思路及查询语句的写法。
44.6万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

索引设计思路

  1. 对于频繁查询年龄大于30岁且分数在80到90之间的记录,考虑到 $gt$gte$lte 等运算符,应创建一个复合索引。
  2. 复合索引的顺序很关键,将查询条件中范围最窄的字段放在前面,在这种情况下,年龄的范围界定相对更窄(大于30岁),所以先按 age 字段建立索引,再按 score 字段建立索引。这样在查询时,数据库能更有效地利用索引来定位数据。

创建复合索引语句(以MongoDB为例)

db.collection_name.createIndex({ age: 1, score: 1 });

上述语句在集合 collection_name 上创建了一个复合索引,age: 1 表示按 age 字段升序排列,score: 1 表示按 score 字段升序排列。

查询语句写法(以MongoDB为例)

db.collection_name.find({
    age: { $gt: 30 },
    score: { $gte: 80, $lte: 90 }
});

该查询语句使用了 $gt 运算符表示年龄大于30岁,$gte$lte 运算符表示分数在80(包括)到90(包括)之间,通过之前创建的复合索引能提高查询性能。