mysql优化之分表

36套java进阶高级架构师视频+38套大数据视频  需要视频的加我vx:du13797566440

一个数据表里边存储的记录信息太多了,记录的条数达到1-2亿条信息。

这是该数据表的活性就大大降低,数据表的运行速度就比较慢、效率低下,影响mysql数据库的整体性能。

现在设置一个水平分割,把许多的记录信息分别存储到不同的数据表里边,这样每个表存储的记录就比较少,该表的活性大大提高。

 

分表设计的两种模式:

① 逻辑方式分表

mysql数据库本身就有分表技术,该方式的分表可以节省java/php等语言的逻辑处理

       水平/垂直拆分

② 物理方式分表

自己手动创建多个数据表出来

java/php等程序需要考虑分表算法:数据往哪个表,从哪个表  

2四种格式的逻辑分表

具体为:key     hash   ---->[求余方式]

            range  list    ---->[范围方式]

            注意:分表字段必须是主键 主键的一部分


2.1 key分表

partition by key(条件字段id) partitions 10;



2.2 hash分表

根据表达式/字段方式进行分表设计

partition by hash(表达式/字段) partitions 数量;



2.3 range分表

根据 字段/表达式 是否满足某个范围条件进行分表设计

partition by range(year(pubdate))(

    #小于1980年的为一个表...

    partition hou70  values  less than (1980), 

    partition hou80  values  less than (1990),

    partition hou90  values  less than (2000),

    partition hou00  values  less than (2010)

)



2.4 list分表

根据 表达式/字段 的内容值是否在某个“列表”中进行分表设计。

partition by list(month(pubdate))(

    partition spring  values  in (3,4,5),

    partition summer  values  in (6,7,8),

    partition autumn values  in (9,10,11),

    partition winter values  in (12,1,2)

)


3. 分表管理

具体就是对已经存在的分表进行增加减少操作。

 增加分表  不会引起数据丢失。

 减少分表  range/list领域造成数据丢失

          key/hash领域不会造成数据丢失,

  这两个领会在进行减少分表的同时就把全部数据重新整合到存在的表中,

          key/hash两种分表与业务逻辑关联不紧密

 

3.1 增加分表

求余方式: key/hash

> alter table 表名  add  partitions  数量;

 

范围方式: range/list

>  alter table 表名 add partition(

           partition 名称 values less than (常量)

           

           partition 名称 in (n,n,n)

       );


3.2 删除分表

求余方式(key/hash):

>alter table 表名 coalesce partition 12;

删除分表不会造成数据丢失,每次分表数据都重新整合到存在的分表里边。

范围方式(range/list):

>alter table 表名 drop partition 分区名称;

删除分表会造成数据丢失


4. 垂直分表

水平分表:是把一个表的全部记录信息分别存储到不同的分表之中。

垂直分表:是把一个表的全部字段分别存储到不同的表里边。

 

有的时候,一个数据表设计好了,里边有许多字段,但是这些字段有的是经常使用的,有的是不常用的。

例如,一个数据表有20个字段,其中10个字段是常用的,后10个字段是不常用的

      那么在操作常用字段的时候,就不得不给其他不常用的字段也分配一定的资源进行操作。

  

数据表:

会员表 user_id  登录名  密码  邮箱  手机号码  身高  体重  性别  家庭地址  身份证号码

以上表,红色是常用的,蓝色的是不常用的

为了使得常用字段运行速度更快、效率更高,把常用字段给跳出来,因此数据表做以下设计:

会员表()字段:user_id  登录名  密码  邮箱  手机号码

会员表()字段:user_id  身高  体重  性别  家庭地址  身份证号码

 

以上把会员表根据字段是否常用给分为两个表的过程就是垂直分表。








猜你喜欢

转载自blog.csdn.net/adudeboke/article/details/80868336