面试题答案
一键面试索引设计思路
- 对于频繁查询年龄大于30岁且分数在80到90之间的记录,考虑到
$gt
、$gte
、$lte
等运算符,应创建一个复合索引。 - 复合索引的顺序很关键,将查询条件中范围最窄的字段放在前面,在这种情况下,年龄的范围界定相对更窄(大于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(包括)之间,通过之前创建的复合索引能提高查询性能。