多个单字段索引 vs 组合索引

3
创建多个单字段索引与创建一个复合索引有什么区别?
db.products.createIndex( { "item": 1 } )
db.products.createIndex( { "stock": -1 } )

vs

db.products.createIndex( { "item": 1, "stock": -1 }

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

1个回答

5
答案取决于您的查询模式。
复合索引满足以下查询:
- 在“item”上查找 - 在“item”和“stock”上查找 - 在“item”上查找并按“stock”排序 - 在“item”和“stock”上查找,并按“item asc”,“stock desc”的顺序排序
上述复合索引无法用于仅查询“股票”字段。因此,您需要单独为此创建一个索引。
单个索引可满足具有该特定字段的查询。
例如,“item”上的索引将满足在查找条件中包含“item”的查询。同样,“stock”上的索引将满足在查找条件中包含“stock”的查询。
如果这两个索引分别存在,并且查询包含“item”和“stock”,那么选择的索引取决于更高的基数。也就是说,在两个字段中,哪个字段能够更好地缩小MongoDB对结果集的范围。
更多阅读请参见 复合索引

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接