如何在MongoDB中使用复合索引?

在MongoDB中使用复合索引主要有以下几点:

  1. 创建复合索引:使用db.collection.createIndex()创建复合索引。传入多个字段名称及排序方向。
    db.products.createIndex({name: 1, price: -1})
  2. 复合索引中的字段顺序很重要。查询使用的字段必须在前缀部分,才可以使用索引。
// 可以使用索引
db.products.find({name: "Apple", price: 100})  

// 不能使用索引  
db.products.find({price: 100, name: "Apple"}) 
  1. 复合索引中的任一字段发生改变,其余字段也会重新索引。
  2. 复合索引可以支持排序操作。排序字段必须在索引前缀中才可以使用索引排序。
// 可以使用索引排序 
db.products.find().sort({name: 1, price: -1})  

// 不能使用索引排序  
db.products.find().sort({price: -1, name: 1})
  1. 复合索引可以提高查询性能。MongoDB会在符合前缀规则的复合索引中选择最小的索引来支持查询。
  2. 使用覆盖查询,索引中的所有字段都在查询的返回字段中,可以避免回表查询提高性能。
db.products.find({name: "Apple", price: 100}, {name: 1, price: 1})  
  1. 复合索引也可以用于排序,但只有索引前缀部分的字段可以用于排序,否则无法使用索引。
  2. 当多个字段频繁一起查询或排序时,创建复合索引可以有效提高性能。