Mysql分表(Server层上的)

发布于 2023-05-27  109 次阅读


目标:什么是分表,怎么分表

什么是分表

  • 垂直分表:按照字段分表,一般分为冷和热
  • 水平分表:按照行分表,常用范围分表、Hash切分
  • 水平分表类似于分区表,但是Server层也进行了分表。(分区表

什么是分库

  • 垂直分库:将数据表分散在多个数据库或者多个节点中
  • 水平分库:将所有表水平拆分,每个数据库结构相同

分库分表的优劣

优点

  • 增加隔离性
  • 提升容量与并发性能
  • 水平分表类似于分区表,但Sever层也分了

缺点

  • 部分失效可能性成倍增加(某个冷表数据库宕机,直接全部不能使用)
  • 无法会用单点事务(没办法同时锁库锁表)
  • 垂直切分后无法JOIN链接
  • 范围查询更加困难

缺点的解决方式

  • 特殊业务特殊处理
  • 使用mysql分库分表中间件(Mycat、Dble等)

使用了分库分表反而更慢了怎么办?

  1. 例如使用时间分片:查询语句中尽可能的带有拆分的关键词(时间节点)
  2. 精简IN查询
  3. DISTINCT、GROUP BY、 ORDER BY 尽量一条sql只有一个
  4. 经常需要JOIN的表,按照相同的规则,放在同一个库里面

间歇性凌云壮志,持续性混吃等死