1。新建分区
mysql 没有全局唯一索引,因此所有涉及唯一索引的都需要加上分区键,因此要做好权衡,键分区不一定能提高效率哦,建分区的主要目的是为了分区查询和删除数据
--将CREATE_TIME 加入主键
ALTER TABLE your_table DROP PRIMARY KEY, ADD PRIMARY KEY (id,create_datetime);
-- 以下是给出两种不同的方式
--给表建分区 根据函数
ALTER TABLE your_table;
PARTITION BY RANGE (YEAR(CREATE_TIME)) (
PARTITION p1 VALUES LESS THAN (2020),
PARTITION p2 VALUES LESS THAN (2021),
PARTITION p3 VALUES LESS THAN (2022),
PARTITION p4 VALUES LESS THAN (2024)
);
--给表建分区 根据字段
ALTER TABLE your_table;
PARTITION BY RANGE COLUMNS(CREATE_TIME) (
PARTITION p1 VALUES LESS THAN (2020),
PARTITION p2 VALUES LESS THAN (2021),
PARTITION p3 VALUES LESS THAN (2022),
PARTITION p4 VALUES LESS THAN (2024)
);
2.追加分区
ALTER TABLE your_table
ADD PARTITION (
PARTITION period_202601 VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB
);
3.删除分区
--删除所有分区
ALTER TABLE your_table_name REMOVE PARTITIONING;;
--删除A分区
ALTER TABLE your_table_name DROP PARTITION A;
4.查询DDL
SHOW CREATE TABLE your_table;
5.查询一个表的分区信息
SELECT *
FROM information_schema.PARTITIONS
WHERE TABLE_NAME = 'your_table';
6.查询一个数据库哪些表有分区
SELECT distinct TABLE_NAME
FROM information_schema.PARTITIONS
WHERE PARTITION_NAME is not NULL;
7.查询一个数据库有多少表
SELECT *
FROM information_schema.tables
WHERE table_schema = 'your_database_name';