mysql 分表与分区

一般来讲,mysql中一个表的总记录超过1000W,就会出现性能的大幅度下降。可以通过分表与分区实现优化。

1. 分表

一张表分成很多表后,每一个小表都是完整的一张表,都对应三个文件,一个.MYD数据文件,.MYI索引文件,.frm表结构文件。
#alluser为虚拟的总表,user1与user2为实际的分表
[root@BlackGhost test]# ls |grep user
alluser.MRG
alluser.frm
user1.MYD
user1.MYI
user1.frm
user2.MYD
user2.MYI
user2.frm

2. 分区

一张大表进行分区后,他还是一张表,不会变成二张表,但是他存放数据的区块变多了。
#按照id的哈希值分为三个区。
mysql> create table user(id int)partition by hash(id)partitions 3;
#分区后的文件形式,可以注意到user.par存放了分区的描述
[root@BlackGhost test]# ls |grep user
user#P#p1.MYD
user#P#p1.MYI
user#P#p2.MYD
user#P#p2.MYI
user#P#p3.MYD
user#P#p3.MYI
user.frm
user.par

除了按照hash来分区,还可以按照时间等来自定义分区规则。

3.比较

分表与分区都可以做到对开发人员代码透明。

不同的子表或区块都可以位于不同的磁盘上,提高并发性能。

你可能感兴趣的:(数据库)