MySQL 数据表优化设计(九):如何设计统计数据表?

本文探讨了MySQL数据表优化,特别是在设计统计和缓存表时的策略。介绍了实时更新与周期性重建统计表的利弊,推荐在高并发场景下使用计数表和插槽技术提高并发量,并提到了Flexviews工具作为物化视图解决方案。
摘要由CSDN通过智能技术生成

有些时候,改进数据表查询性能的最佳方式是在同一张数据表中冗余一些继承的数据。然而,有些时候需要新建完全独立的统计或缓存数据表,尤其是在需要反复查询的需求情况下。如果业务允许一些时间上的误差的话,那么这种方式会更好。

缓存型数据表通常在统计数据时会经常用到,因此也会叫统计性数据。举个例子来说,对于员工、部门数据表而言,我们可能会需要查询一个部门下有多少员工。这时候有三种方式实现:

  • 在部门下增加一个员工数量的字段,每次对员工进行增、改、删操作时都需要同步更新员工数量(如果员工换部门,则需要更新多个部门的员工数量)。这种方式能够保证实时性,但是却很低效。对于如果是操作不频繁时是没问题的,假设相当频繁,就意味着每次都需要操作两张表,而且业务代码都需要做埋点处理,将统计业务和普通业务深度耦合在一起了。
  • 每次查询的时候,从员工表中执行 SUM 函数,获取该部门的员工数。这种方式避免了埋点,但是每次都需要去员工数据表求和,如果员工数据量大的话会很低效。
  • 新建一张统计表,每隔一定时间从员工表中汇总每个部门的人员数量。这种定时抽取数据的方式会牺牲一定的实时性,但降低了代码的耦合,由于部门不会太多,这张表的大小是可预测的,也提高了数据访问的效率。这种方式即缓存型数据表

以掘金的手机端个人中心为例,为展示每个用户的关注人数、关注者和掘力值,不可能每次查询都去做一次 SUM,这意味着需要做多张表的 SUM 操作,效率会很低,而且掘力值的计算还涉及到更为复杂的计算方法(与文章的浏览量和点赞数有关)。因此,可以猜测一下大致的表设计,这样在查询用户个人主页信息的时候只需要从这一张表就可以读取到所有数据了。

CREATE t_user_summay (
  id INT PRIMARY KEY,
  user_id BIGINT(20),
  focused_user_cnt INT,
  followed_user_cnt 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岛上码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值