MySQL优化(超完整版)(二)
7. MySQL分库分表 (1) 分库分表概念介绍 MySQL的分库分表有两种方式: 垂直拆分 和 水平拆分 。 垂直拆分 :垂直拆分就是要 把表按模块划分到不同数据库表中 (当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在一起,当网站不断丰富和壮大的时候,也会变成多个子系统来支撑,这时就有按模块和功能把表划分出来的需求。其实,相对于垂直切分更进一步的是服务化改造,说得简单就是要把原来强耦合的系统拆分成多个弱耦合的服务,通过服务间的调用来满足业务需求看,因此表拆出来后要通过服务的形式暴露出去,而不是直接调用不同模块的表。(垂直拆分用于分布式场景) 水平拆分 :解决单表大数据量的问题,水平切分就是要把一个表按照某种规则把数据划分到不同表或数据库里。例如:在大型电商系统中,每天的会员人数不断的增加。达到一定瓶颈后如何优化查询。通过将表数据水平分割成不同的表来实现优化。(实现规则:hash、时间、不同的维度) 通俗理解:水平拆分行,行数据拆分到不同表中, 垂直拆分列,表数据拆分到不同表中。 (2) 水平分表的案例 分表原理: 取模拆分(一致性hash),可以将数据分配的比较均匀。 这里我们以3张表为例: 案例: 首先我创建三张表 user0 / user1 /user2