多个单字段与复合索引

sta*_*lay 3 indexing mongodb

创建多个单字段索引与复合索引有什么区别,如下

db.products.createIndex( { "item": 1 } )
db.products.createIndex( { "stock": -1 } )
Run Code Online (Sandbox Code Playgroud)

db.products.createIndex( { "item": 1, "stock": -1 }
Run Code Online (Sandbox Code Playgroud)

另外,在创建复合索引后,我是否需要为每个item,单独创建一个字段索引stock?如果是,在什么情况下我需要这样做?

dil*_*ngi 5

答案取决于您的查询模式。

复合索引满足以下查询

  • 在“物品”上查找
  • 查找“商品”和“库存”
  • 查找“商品”并按“库存”订购
  • 查找“item”和“stock”,按“item asc”、“stock desc”排序

上述复合索引不会单独用于“stock”字段的查询。所以你需要一个单独的索引。

单个索引可以满足仅使用该特定字段的查询。

  • 例如,“item”上的索引将满足查找条件中包含“item”的查询。
  • 同样,“stock”上的索引将满足查找条件中包含“stock”的查询。

如果这两个索引单独存在并且查询同时包含“item”和“stock”,则索引的选择取决于较高的基数。这就是这两个字段中的哪个字段可以让 MongoDB 更好地缩小结果集的范围。

进一步阅读复合索引