欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL分区表

程序员文章站 2022-06-02 08:12:06
...

一、概念

分区表是一个独立的逻辑表,但是底层由多个物理子表组成。分区表对应用上层是透明的。需要注意的是:分区的索引是按照子表定义的,没有全局索引的概念。

二、分区表的优缺点

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 分区+分区字段没有索引
只建了分区,但是分区字段没有建索引