重新认识Mysql中冗余字段的优缺点在设计数据库时,我们往往会根据数据库范式来减少数据之间的冗余,但是冗余字段就像一把双刃剑。在业务需求方面,有效增加数据冗余也可以提高数据访问效率。什么是冗余字段?我个人理解为在多个表中重复出现的字段。比如users表中有一个字段B,Wallet表中有一个字段B。该字段用于两个表中的业务。好处:为什么要使用冗余字段1.空间换时间当我们遇到一个数据量非常大的表时,此时做表关联查询(Join)对系统性能消耗很大,甚至可能会导致数据库连接等问题超时和崩溃。这时候就需要进行冗余设计,将一些字段冗余到关联表中,避免大表之间的关联查询,提高更快的响应速度。2、业务快照在电子商务系统的开发中,大部分的交易场景都是数据快照。用户下单时,在使用收货人、地址、商品名称、商品描述、价格等字段时,如果采用关联表的设计,如果用户下单后更新了商品A,则执行关联查询会得到结果在与用户操作错误的数据不一致的情况下,会发生交易纠纷。例如:商品A今天特价100元,明天恢复原价200元。用户A今天下单,消费100元,明天恢复价格。用户申请退款,系统要退200??元,显然不合理。为了在系统中更健壮地为用户服务,我们需要设计冗余字段来保证我们某些服务的可靠性。缺点:为什么不使用冗余字段,系统开销大,维护成本高当一张表有多个冗余字段时,每更新一条记录,为了保证数据的一致性,这些冗余字段需要每隔一段时间更新一次时间,增加了系统开销和维护成本。数据一致性当冗余字段使用较多时,数据一致性难以保证。为了保证一致性,会产生很大的性能开销。如果有一些冗余字段是人工维护的(开发者),数据会保持一致,比如一个动态有3个实际评论,但是冗余字段显示15个,这就会造成剩下的评论去哪儿的问题。空间成本表A有5个冗余字段,随着业务量的增长,每天有1000万条新数据添加到表A。随着时间的推移,这些冗余字段将成为您存储中的缺陷。如何平衡冗余的设计1.遵循第三范式3NF尽量减少冗余字段,不要随便使用冗余字段。2.只在关键业务数据中使用冗余字段,这将使数据库性能更好更快。3、根据业务需要决定是否使用冗余字段。统计字段可以存储在json结构中或者创建冗余数据表,通过策略维护和更新
