MongoDB查询性能对比:单集合加标识字段还是3个独立集合?
MongoDB 两种存储方案查询性能对比
结论完全取决于你的日常查询场景:
- 如果绝大多数查询都是只筛选某一个固定属性值的数据,分3个独立集合的方案查询更快:
- 不用额外加字段过滤条件,MongoDB 直接读取对应集合的内容即可,省去了字段匹配、索引扫描的开销
- 单个集合的数据量更小,内存命中率更高,磁盘IO开销更低,哪怕是全表扫描场景速度也比单集合快不少
- 要是不同属性值对应的文档结构差异大,分集合还能减少冗余字段存储,单文档体积更小,进一步提升查询效率
- 如果经常需要跨多个属性值做查询、聚合运算,选单集合加枚举字段的方案更快:
- 分集合的场景下需要做多集合结果合并,MongoDB 跨集合查询、结果拼接的开销远高于单集合加个过滤条件的开销
- 只要给这个枚举字段建好索引
db.collection.createIndex({枚举字段名: 1}),单集合的字段过滤性能和分集合的差距非常小,复合查询场景下性能反而更高
要是你后续可能新增属性枚举值,或者希望写入逻辑更简单好维护,优先选单集合加字段的方案,只要做好索引优化,性能差距几乎可以忽略,维护成本低很多。
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

