概念
分表:分表就是将一张表分成N张小表,
分区:就是将一张表的数据分成N个区块,这些区块可以放在一个磁盘上.一张表主要对应三个文件:
frm:存放表结构
myd:存放表数据
myi:存放索引的
如果一张表数据量太大了的话,那么myd 和 myi 就会变的很大,那么我们在查询数据的时候就会很慢,所以这个时候我们就可对其进行表,在物理上将这一张表对应的三个文件,分割成多个小块,这时在查询某一条数据的时候,不用查找全部的数据,只用找到这条数据在哪儿一块儿,然后找到对应的那一块儿就行了.如果一张表的数据太大,可能一个磁盘放不下,这个时候,我们就可以把数据分配到不同的磁盘里面去了.
如何分表
分表的方式有两种:
水平分割(横向分割)
就是横着来分区,比如有100w条数据,分成10份,每一份存放在一个区,而每一区中都包含分区之前表中的所有字段.
垂直分割(纵向分割)
就是竖着来分区了.出现这种情况的原因很多时候是因位数据表在前期设计的时候每有考虑好,导致了这张表中的字段太多了.有些字段可以不经常用也放在一张表中,所有我们可以将这些字段分开来.
数据方面
分表后,数据都存放在分表中,以前的表就是一空壳,村塾数据发生在一个一个分表中,
分区后,没有分表的概念,分区只是包存放数据的文件分成了许多小块,分区之后的表还是一张表.
意义–提高性能
分表:单表并发能力提高了,因为查询一次的所用时间缩短了,如果高并发的话,总表可以根据不同的查询,将并发压力分到不同的小表里面,同时也提高了磁盘的I/O性能,因为原来一个很大的myd(表数据)文件也分摊到了各个小表的myd中去了.
分区:
1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。
总结:二者的联系
1,都能提高mysql的性高,在高并发状态下都有一个良好的表面。
2,分表和分区不矛盾,可以相互配合的,对于那些大访问量,并且表数据比较多的表,我们可以采取分表和分区结合的方式(如果merge这种分表方式,不能和分区配合的话,可以用其他的分表试),访问量不大,但是表数据很多的表,我们可以采取分区的方式等。
来源:https://blog.csdn.net/Andy_Singh/article/details/100019634