分区跟分表类似,目的是将一张表分到不通的存储中,这样可以减少单一磁盘IO占用,提高数据库效率
分区主要有两种形式
水平分区
对表的行进行分区,
垂直分区
减少表的宽度,
想使用分区,需要先查看当前是否支持
show variables like '%partition%'
出现yes即可使用
实例,按照range方式分区的表
create table if not exists gao(id int primary key auto_increment , name varchar(30))
default charset=utf8 auto_increment=1
partition by range(id)(
partition p0 values less than(10) data directory '/data/gao1',
partition p1 values less than maxvalue data directory '/data/gao2');
alter table 表名 add partition (partition 名字 values less than (n)) 增加分区
alter table 表名 reorganize partition p1,p2,p3 into(partition p1 values less than(10) , partition p2 values less than(20)) 合并分区
------------------------------------------------------------------------------------------------------------
使用list分区
partition by list(id) 是一个数字列
(partition p1 values in (1,3,5)
partition p2 values in (2,4,6)); 每个分区表写入id值一样的,如果写入的数字分区表中没有则会报错,数值不能重复只能有一个.
---------------------------------------------------------------------------------------------------------------
分区跟分表的区别,
mysql的分表是真正的分表,一张表分成多个表,每个表都是完整的一张,都拥有三个文件,MYD数据文件,MYI索引文件,FRM表结构文件
分区是将一张表进行多个存放,还是一张表,不会变多,
分区跟分表是可以同时使用的!!!!不冲突
都是为了mysql提高性能
分表麻烦,需要单独创建分表,分区则不需要,会自动创建.