SQL策略分库分表

分表技术
对于一个表中的数据量非常庞大,我们可以采用分表技术,来减少表的大小,在进行查询的时候能提高效率。分表方式:水平分割、垂直分割
水平分割
A)表的结构不会发生变化
B)根据一些标准或者说是根据模型的某个字段进行相关的运算或者经过一些算法处 理得到一个表号,然后插入到所对应的表中。或者在对应的表中进行查询。根据实际需要也 可以留总表,方便其他处理。
如:对 员工基本信息进行分表,假设存储 员工基本信息 的表有 3 个分别为 Personlogin0 Personlogin1 Personlogin2;在对某个 员工号进行查询的时候可先进行取余运算获得表号然后 select 该表,在对 员工进行插入的时候同样对经过一些算法或者规则生成的 员工号进行取余得到表号进行 insert。
在提供检索时,应该根据业务的需求,找到分表的标准,并在检索页面,约束用户的检 索方式使其符合标准,减轻压力比如分页显示等
SQL策略分库分表_第1张图片
水平拆分优点:
(1)不存在单库大数据和高并发的性能瓶颈。
(2)应用端改造较少。
(3)提高了系统的稳定性和负载能力。

水平拆分缺点:
(1)非分表他字段查询成本高
(2)跨节点 Join 性能差,逻辑复杂。
(3)数据多次扩展难度跟维护量极大。

字典表
将尽可能多用到的查询字段放在字典表里面,通过字典表去定位分表字段,通过分表字 段查询具体的表数据

垂直分割
如果一张表某个字段,信息量大、内容多,但是我们很少查询,则可以考虑把这些字段, 单独的放入到一张表中,这种方式称为垂直分割.做好关联,使用时单独查询。拆分是基于关系型数据库中的“列”(字段)进行的。通常情况,某个表中的字段比较多,可以新建立一张“扩展表”,将不经常使用或者长度较大的字段拆分出去放到“扩展表”中,如下图所示:
SQL策略分库分表_第2张图片
垂直拆分优点:
(1)可以使得行数据变小,一个数据块 (Block) 就能存放更多的数据,在查询时就会减少 I/O 次数 (每次查询时读取的 Block 就少)。
(2)可以达到最大化利用 Cache 的目的,具体在垂直拆分的时候可以将不常变的字段放一起,将经常改变的放一起。
(3)数据维护简单。

垂直拆分缺点:
(1)主键出现冗余,需要管理冗余列。
(2)会引起表连接 JOIN 操作(增加 CPU 开销)可以通过在业务服务器上进行 join 来减少数据库压力。
(3)依然存在单表数据量过大的问题(需要水平拆分)。
(4)事务处理复杂。

后续更新中。。。如有更好总结欢迎下方进行评论。也可加QQ:1456263798进行私聊讨论。

你可能感兴趣的:(高性能SQL基础栈)