Mysql性能优化-8.分表

1.分表,水平分表

分区和分表都是水平分表

通常指的是,通过应用程序层,将数据划分到不同的表中进行存储。对比分区,分区实在MySQL服务器层的分区算法。

分表,会导致客户端的明显改变。在服务器端,出现结构相同的多张表。

存在结构完全相同的多张表:是以时间作为划分的;

mysql> create table bill201903(
    -> id int unsigned auto_increment primary key,
    -> user_id int unsigned,
    -> amount decimal(10, 2),
    -> billtime int
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> create table bill201904(
    -> id int unsigned auto_increment primary key,
    -> user_id int unsigned,
    -> amount decimal(10, 2),
    -> billtime int
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> create table bill201905(
    -> id int unsigned auto_increment primary key,
    -> user_id int unsigned,
    -> amount decimal(10, 2),
    -> billtime int
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> create table billid(
    -> id int unsigned auto_increment primary key
    -> );
Query OK, 0 rows affected (0.02 sec)

由程序来决定数据该插入到哪个表。
需要考虑id的问题。要保证不能出现重复的账单id。
人为做一个自增的ID即可。利用memcached,redis先生成id,再插入。或者利用数据库,有一张专门用来创建billid,先生成再使用。
表甚至可以分布到不同的数据库服务器上。

2.分表的原因

  • 数据库减压
  • 分区的算法局限。(重要原因)
  • 数据库支持不完善。分区5.1之后才支持的。

3.垂直分割

垂直分割,每个表的记录数量一致。但是字段不一致。
表之间的关系,典型的1:1的关系。

分割的依据,业务逻辑,在功能中常在一起使用的字段,分布到一个表中。

你可能感兴趣的:(Mysql性能优化-8.分表)