Mysql的高可用性和高扩展性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_34828933/article/details/87996187

Mysql的分表操作和分区的工作原理

分区表

1、原理

  • 对于用户而言,分区表是一个独立的逻辑表,但是底层的Mysql将其分成了多个物理子表,对于用户来说是透明的,每一个分区表都会使用一个独立的表文件
    在这里插入图片描述
  • 创建表时使用partition by子句定义每个分区存放的数据,执行查询时,优化器会根据分区定义那些没有我们需要数据的分区,这样查询只需要查询我们需要数据的分区即可
  • 分区的主要目的是将数据按照比较粗的颗粒度分在不同的表中,这样可以将相关的数据存放在一起,而且想一次性删除相关分区的数据也比较方便

2、适用场景

  • 表非常大,无法全部存放在内存里,或者只在表的最后有热点数据,其他都是历史数据
  • 分区表的数据更容易维护,可以对对立的分区表进行独立的操作
  • 分区表的数据可以分布在不同的机器上,从而提高使用效率
  • 可以使用分区表来避免某些特殊的瓶颈
  • 可以备份和恢复独立的分区

3、限制

  • 一个表最多只能有1024个分区
  • 5.1版本中,分区表表达式只能是整数,5.5可以使用列分区
  • 分区字段中如果有主键和唯一索引列,那么主键列和索引列和唯一列都必须包含进来
  • 分区表中无法使用外键约束
  • 需要对现表的结构进行修改
  • 所有分区都必须使用相同的存储引擎
  • 某写存储引擎是不支持分区的(MyISAM和InnoDB都是支持的)
  • 对于MyISAM引擎的分区表,不能使用load index to cache
  • 对与MyISAM表,使用分区表时需要打开更多的文件描述符

分库分表

1、原理

  • 通过hash算法或工具实现将一张表数据垂直或水平进行物理切分

2、使用场景

  • 单表数据记录达到百万或者千万级别时
  • 解决表锁的问题

3、分表方式

分表方式 描述
水平分割 表很大分割后可以降低在查询需要读的数据的和索引的页数,同时也降低了索引的层数,提高查询效率
垂直分表 把主键和一些列放在一张表,把主键和另外的列放在另一种表中

4、水平分表使用场景

  • 表中数据本身就有独立性
  • 需要把数据存放到多个介质上

5、水平分表的缺点

  • 给应用增加复杂度,通常查询时需要多个表名,查询所有数都需union操作
  • 在许多数据库应用中,这种复杂度会超过他带来的优点,查询的时候会增加一个索引层的磁盘次数

猜你喜欢

转载自blog.csdn.net/sinat_34828933/article/details/87996187