提高性能方式:索引、分区
要分区的字段必须为主键或联合主键之一
对于有数据的表先备份后,删除原表数据再划分分区,否则太慢了。
新增分区
ALTER table test_partition ADD PARTITION (
PARTITION p20231001 VALUES LESS THAN ('2023-10-01'),
PARTITION p20231101 VALUES LESS THAN ('2023-11-01'),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
查看分区数据
SELECT * FROM test_partition PARTITION(p20230801);
删除分区数据
ALTER table test_partition truncate PARTITION p20231101;
删除分区
数据存储在分区上,删除分区的同时也会删除分区上的数据
ALTER table test_partition DROP PARTITION p20231101;
删除所有分区
删除表的所有分区
ALTER TABLE test_partition REMOVE PARTITIONING;
查看分区
SELECT partition_name,partition_description from information_schema.partitions
WHERE table_name = 'test_partition' and table_schema = '**database_name**';
重新定义分区
如果想在中间增加分区的话不能使用ADD PARTITION
ALTER table test_partition ADD PARTITION (
PARTITION p20230810 VALUES LESS THAN ('2023-08-10')
);
报错:
VALUES LESS THAN value must be strictly increasing for each partition
重新定义分区:在不丢失数据的情况下,重新编辑分区
ALTER TABLE ... REORGANIZE PARTITION
拆分分区
– 将p20230901分区拆分成p20230810和p20230901分区
ALTER TABLE test_partition REORGANIZE PARTITION p20230901 INTO (
PARTITION p20230810 VALUES LESS THAN ('2023-08-10'),
PARTITION p20230901 VALUES LESS THAN ('2023-09-01')
);
合并分区
将多个相邻的RANGE分区合并为一个或多个RANGE分区, 合并后的分区必须和原来的区间覆盖相同
– 将p20230810和p20230901分区合并为p20230901分区
ALTER TABLE test_partition REORGANIZE PARTITION p20230810,p20230901 INTO (
PARTITION p20230901 VALUES LESS THAN ('2023-09-01')
);
查看所有分区
SELECT table_name, partition_name, table_rows
FROM information_schema.partitions
WHERE table_schema = '数据库名' AND table_name = '表名';