mysql表分区基础
表结构文件
.frm 表结构文件
.par partition申明一个分区表
.ibd 数据索引文件 innodb引擎表
.MYD 数据文件 myisam表数据文件
.MYI 索引文件 myisam表索引文件
Myisam 存储引擎,它默认使用独立表空间
InnoDB 存储引擎,默认使用共享表空间,默认存到ibdata1
查看表空间设置
SHOW VARIABLES LIKE '%innodb_file_per_table%';
修改表空间设置(/ect/my.cnf)
innodb_file_per_table=1
查看mysql是否支持分区
show plugins;
or
show variables like '%part%';
分区类型
RANGE: 基于一个连续的区间范围,将数据分配到不同的分区。<br>
LIST:基于枚举出的值列表分区。<br>
HASH: 基于给定的分区数,将数据分配到不同的分区。<br>
KEY: 类似于HASH分区,但不允许用户自定义表达式。
RANGE分区
CREATE TABLE USER(
id INT NOT NULL,
NAME VARCHAR(20)
)
PARTITION BY RANGE(id)(
PARTITION p1 VALUES LESS THAN (3),
PARTITION p2 VALUES LESS THAN (6),
PARTITION p3 VALUES LESS THAN (9),
PARTITION p4 VALUES LESS THAN MAXVALUE
);
insert into user values (1,'aaa'),(2,'bbb'),(3,'ccc'),(4,'ddd'),(5,'eee'),(6,'fff'),(7,'ggg'),(8,'hhh'),(9,'iii'),(10,'jjj'),(11,'kkk'),(12,'lll')
查看表结构
show create table user;
查看查询是否使用partition分区过滤
EXPLAIN PARTITIONS SELECT id,NAME FROM user where id =8 \G
list分区
CREATE TABLE listname(
id INT NOT NULL,
NAME VARCHAR(20)
)PARTITION BY LIST (id)(
PARTITION p1 VALUES IN (1,3,5),
PARTITION p2 VALUES IN (2,4,6)
);
INSERT INTO listname VALUES (1,'111'),(2,'222'),(3,'333'),(4,'444')
EXPLAIN PARTITIONS SELECT * FROM listname WHERE id=2;
hash分区
CREATE TABLE hash_part(
id INT NOT NULL,
NAME VARCHAR(20)
)PARTITION BY hash (id)(
PARTITIONS 3
);
INSERT INTO hash_part VALUES (1,'111'),(2,'222'),(3,'333'),(4,'444')
EXPLAIN PARTITIONS SELECT * FROM hash_part WHERE id=2;
ls /var/lib/mysql/ceshi/
key分区
CREATE TABLE key_part(
id INT NOT NULL,
NAME VARCHAR(20)
)PARTITION BY LINEAR KEY (id)
PARTITIONS 3;
INSERT INTO key_part VALUES (1,'111'),(2,'222'),(3,'333'),(4,'444')
EXPLAIN PARTITIONS SELECT * FROM key_part WHERE id=2;
ls /var/lib/mysql/ceshi/
分区管理
删除分区
alter table tbl_name DROP PARTITION partition_names;
新增分区
range添加
alter table USER add partition (partition p4 values less than MAXVALUE);
list添加
alter table listname add partition (partition p3 values in (7,8,9));
hash重新分区
alter table hash_part add partition partitions 6;
key重新分区
alter table key_part add partition partitions 6;
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!