读性能优先场景下 多行少列与单行多列存储哪种效率更高
最优方案选择建议:优先选方案2(单行多列设计)
- 读性能远优于方案1:单用户查询权限时,方案2只需要检索1行就能拿到该用户所有task的权限标识,而方案1需要拉取多行再做遍历聚合,单次查询的IO开销、数据库计算量都小很多,完全匹配读性能优先、单用户登录后至少调用15次的核心需求,放在核心路由里调用的延迟会低很多。
- 应用层处理开销更低:取到数据后直接通过
task1/task2/task3字段就能判断权限,不需要额外对多行结果做格式转换,高频调用场景下能进一步降低整体接口耗时。 - 数据冗余风险更低:单用户对应唯一一行数据,新增/修改权限时只需要更新对应字段,不会出现方案1可能存在的单用户重复插入同task数据的脏数据问题。
如果后续task的数量持续增长到几十甚至上百个,字段太多影响表结构维护,可以搭配缓存层(比如把单用户权限序列化后存在内存或Redis里)进一步优化读性能,但当前场景下方案2是最优解。
内容的提问来源于stack exchange,提问作者sixovov947
相关产品推荐
相关产品推荐

