分区表的原理:
对用户来说,分区表是一个独立的逻辑表,但是底层MySQL将其分成了多个物理子表,这对用户来说是透明的,每个分区表都会使用一个独立的表文件。
适用场景:
1.表非常大,无法全部存在内存,或者只在表的最后有热点数据,其他都是历史数据。
2.分区表的数据更易维护,可以对独立的分区进行独立的操作。
3.分区表的数据可以分布在不同的机器上,从而高效的使用资源。
4.可以备份和恢复独立的分区
限制:
1.一个表只能有1024个分区
2.5.1版本中分区表的表达式必须是整数,5.5可以使用列分区。
3.分区字段中,如果有主键和唯一索引列,那么主键列和唯一索引列,都必须包含进来。
4.分区表无法使用外键索约束
5.需要对现有表的结构进行修改
6.所有分区都必须使用相同的储存引擎
7.某些存储引擎是不支持分区的
工作原理:通过HASH算法或者工具现实将一张数据表垂直或者水平进行物理分割。
分割方式:水平分割,表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时降低了索引的层数,提高了查询效率。
分库分表的原理:
使用场景:
1.表中的数据有独立性,例如表中分别记录各个地区的数据或者不同时期的数据
2.需要把数据存放在多个介质上
水平分表缺点:
1.给应用增加复杂度,通常查询时需要多个表名,查询所有数据都需要union操作
2.在许多数据库应用中,这种复制性会超过它带来的优点,查询时会增加读一个索引层的磁盘次数。
3.把主键和一些列放在一个表,然后把主键和另外的列放在另一个表中。
垂直分表:
把主键和一些列放在一个表,然后把主键和另外一的列放另一个表中。
使用场景:1.如果一个表某些列常用,而另外一些列不常用
2.可以使数据行变小,一个数据页能储存更多数据,查询时减少I/O次数。
垂直分表缺点:
1.管理冗余列,查询数据需要JOIN操作
MySQL负载均衡和复制原理:
在主库上把数据更改记录到二进制日志,
从库将主库的日志复制到自己的中继日志,
从库取中继日志中的事件,将其重放到从库数据中。