创建复合索引
db.collectionName.createIndex({city: 1, age: 1, name: -1})
查询语句
db.collectionName.find({city: "目标城市名称"}).sort({age: 1, name: -1})
索引设计思路
- 前缀索引原则:以
city
字段作为索引的第一部分,因为我们首先要按 city
过滤数据。这样可以快速定位到符合 city
条件的文档子集,大大减少后续排序操作需要处理的数据量。
- 排序匹配原则:接着是
age
字段升序和 name
字段降序,与查询中的排序顺序完全匹配。MongoDB 的索引可以支持按照索引字段顺序的排序操作,如果索引顺序和查询排序顺序不一致,可能无法利用索引进行高效排序,导致全表扫描。
查询运算符作用
find
:用于从集合中查询文档,{city: "目标城市名称"}
作为查询条件,筛选出指定城市的文档。
sort
:按照指定的字段顺序和方向对查询结果进行排序,{age: 1, name: -1}
分别指定了 age
字段升序和 name
字段降序。这个排序操作可以利用我们创建的复合索引来高效完成,提升查询性能。