一、概念
分区表是一个独立的逻辑表,但是底层由多个物理子表组成。分区表对应用上层是透明的。需要注意的是:分区的索引是按照子表定义的,没有全局索引的概念。
二、分区表的优缺点
2.1 优点
1、大表数据分区,查询时优化器根据分区定义,无须扫描所有分区,只查找需要数据的分区
2、批量删除整个分区十分方便
2.2 缺点
1、一个表最多只能有1024个分区
2、在分区表上,用于分区表达式里的每一个字段都必须是唯一性索引的一部分(包括主键)
3、分区表中无法使用外键
4、分区键不可以为NULL
5、分区列和索引列不匹配导致无法进行分区过滤
三、分区表的语法
3.1 创建分区表
mysql> CREATE TABLE IF NOT EXISTS `user` (
-> `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
-> `name` varchar(50) NOT NULL DEFAULT '' COMMENT '名称',
-> `sex` int(1) NOT NULL DEFAULT '0' COMMENT '0为男,1为女',
-> PRIMARY KEY (`id`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
-> PARTITION BY RANGE (id) (
-> PARTITION p0 VALUES LESS THAN (3),
-> PARTITION p1 VALUES LESS THAN (6),
-> PARTITION p2 VALUES LESS THAN (9),
-> PARTITION p3 VALUES LESS THAN (12),
-> PARTITION p4 VALUES LESS THAN MAXVALUE
-> );
3.2 对现有表进行分区
alter table aa partition by RANGE(id)
-> (PARTITION p1 VALUES less than (1),
-> PARTITION p2 VALUES less than (5),
-> PARTITION p3 VALUES less than MAXVALUE);
3.3 删除分区
mysql> alter table aa drop partition p2;
四、索引方式:
性能依次降低
4.1 主键分区
主键分区即字段是主键同时也是分区字段,性能最好
4.2 部分主键+分区索引
使用组合主键里面的部分字段作为分区字段,同时将分区字段建索引
4.3 分区索引
没有主键,只有分区字段且分区字段建索引
4.4 分区+分区字段没有索引
只建了分区,但是分区字段没有建索引
网友评论