网站建设留言板怎么做,做营销网站企业,个人网站 论坛,做网站会出现什么问题最近看到公司的其中一个数据库用户表每个月都要几百万的新用户数据增加#xff0c;目前单表已经是两千多万了。所以找了 DBA 讨论#xff0c;发现以前学的知识#xff0c;以及网上的一些资料其实说的并不是很正确#xff0c;比如 mysql 单表不建议超过一千万#xff0c;我…最近看到公司的其中一个数据库用户表每个月都要几百万的新用户数据增加目前单表已经是两千多万了。所以找了 DBA 讨论发现以前学的知识以及网上的一些资料其实说的并不是很正确比如 mysql 单表不建议超过一千万我司 DBA 数据规范建议是单表最多不超过五千万。DBA 认为单看数据表的行数来决定分不分表是不正确。结合自己的知识和 DBA 的建议记录一下需要分表的场景 1. 表字段多部分字段不经常用使用 show index from tablename 查看索引状态
2. 表数据占物理空间大
3. 数据库服务器性能问题使用 show processlist 查看当前连接状态是否有慢 sql
4. 业务查询较多查询慢使用 explain 查询 sql 是否使用索引
5. 业务受到影响不满足日常需求 分表方式有水平分表垂直分表。常用的水平分表都是 RANGE 、一致性 HASH 算法 、取模几种方式。分表之后业务代码、架构也需要调整比如引入中间件否则分页排序事务都无法处理。 分享一下我 2020 年开发的一个支付系统 MySQL 按月水平分表的例子当时每天有 10 万笔订单单表已经 3000 多万的数据常用查询字段订单号、订单状态、创建时间、商户id、字段已经有添加索引了查询性能比较差一个查询要2-3秒。 以下是技术升级改造处理过程 1. 原有表名为 orders批量创建一年的分表按订单创建时间的月份创建表名为 orders_202001 orders_202002 以此类推订单流水表也是类似。
2. 创建订单时按获取创建时间加表名得到分表名称写入数据创建时间也作为订单号的前缀根据订单号查询时也能获取到分表名称
3. 将管理后台涉及查询的接口继续改造添加限制条件最多只能查询 2 个月时间内的订单超出的分多次查询调研了金融类项目都有查询时间限制可能也是做了水平分表避免分表之后需要查询所有数据表查询性能比没有分表更差查询订单数据时我们可以使用 UNION ALL 操作符将不同分表的数据合并在一起。 分表之后的业务价值有两点 1. 查询性能提升、用户体验更佳。
2. 节省服务器成本如果没有分表数据库服务器升级配置也可以满足但是成本更高了。 项目地址
源码资料