MongoDB唯一索引与复合索引选型:仅用复合索引可行吗?
MongoDB索引创建疑问解答
仅创建复合索引memberId_1_contentId_1是否可行?
完全可行。MongoDB的复合索引支持前缀匹配规则,你的查询仅以memberId为过滤条件,复合索引的前缀部分memberId_1会被查询引擎识别并利用,能正常为这个查询提供索引加速,小数据量下和单独的memberId索引效果几乎无差异。
你的查询代码示例:
default List<ContentBuyList> getContentBuyListByMemberId(String memberId) { return this.findAll( contentBuyList.memberId.eq(memberId) ); }
单独创建唯一索引memberId_1有何优势?
- 唯一性约束:这是最核心的优势。唯一索引能强制保证
memberId字段全局唯一,避免同一个memberId对应多条ContentBuyList数据;而复合索引memberId_1_contentId_1的唯一性是memberId+contentId的组合唯一,无法限制单个memberId的重复。 - 更小的索引体积:单独的
memberId索引只存储memberId字段的值,相比复合索引同时存储memberId和contentId,占用的磁盘空间更少。数据量越大,索引加载到内存的效率差异越明显。 - 略优的查询性能:针对仅基于
memberId的查询,单一索引的结构更简单,MongoDB在索引匹配、扫描时的开销比复合索引更低,大数据量下这种性能差异会被放大。
内容的提问来源于stack exchange,提问作者jinwoo
相关产品推荐
相关产品推荐

