1. 概述
通过删除仅包含该数据的分区(或多个分区),通常可以轻松地从分区表中删除失去其实用性的数据。相反,在某些情况下,通过添加一个或多个新分区来特别存储该数据,可以极大地促进添加新数据的过程。
由于满足给定WHERE子句的数据只能存储在一个或多个分区上,因此可以大大优化某些查询,这会自动从搜索中排除任何剩余的分区。由于在创建分区表后可以更改分区,因此可以重新组织数据以增强在首次设置分区方案时可能不常使用的频繁查询。这种排除不匹配分区(以及它们包含的任何行)的能力通常称为 分区修剪。
查看是否支持分区
MariaDB []> SHOW PLUGINS;
Name
Status
Type
partition
ACTIVEt
STORAGE ENGINE
2.完成一个空的分区表创建
2.1 Create Table:
CREATE TABLE `test1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sip` varchar(32) NOT NULL,
`client_address` varchar(32) DEFAULT NULL,
`media_name` varchar(128) DEFAULT NULL,
`auth_encrypt` varchar(1024) DEFAULT NULL,
`auth_decrypt` varchar(1024) DEFAULT NULL,
`sn` varchar(128) DEFAULT NULL,
`error_code` int(11) DEFAULT NULL,
`response_code` int(11) DEFAULT NULL,
`start_time` bigint(20) DEFAULT NULL,
`end_time` bigint(20) DEFAULT NULL,
`play_duration` bigint(20) DEFAULT NULL,
`insertTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`client_ip` varchar(32) DEFAULT NULL,
`client_sn` varchar(512) DEFAULT NULL,
`media_type` int(12) DEFAULT NULL,
`token_decrypt` varchar(512) DEFAULT NULL,
`token_encrypt` varchar(512) DEFAULT NULL,
PRIMARY KEY (`id`,`insertTime`)
)ENGINE=InnoDB
PARTITION BY RANGE (UNIX_TIMESTAMP(`insertTime`))(
PARTITION p0 VALUES LESS THAN (UNIX_TIMESTAMP('2019-03-30 00:00:00')),
PARTITION p1 VALUES LESS THAN (UNIX_TIMESTAMP('2019-03-31 00:00:00')),
PARTITION p2 VALUES LESS THAN (UNIX_TIMESTAMP('2019-04-01 00:00:00'))
);
2.2 创建表后, 数据库目录下会生成3个分区的表空间
[root@localhost ~]# ls /var/lib/mysql/test -lh
总用量 41M
-rw-rw----. 1 mysql mysql 14K 3月 29 11:37 test1.frm
-rw-rw----. 1 mysql mysql 44 3月 29 11:37 test1.par
-rw-rw----. 1 mysql mysql 96K 3月 29 11:38 test1#P#p0.ibd
-rw-rw----. 1 mysql mysql 96K 3月 29 11:38 test1#P#p1.ibd
-rw-rw----. 1 mysql mysql 96K 3月 29 11:38 test1#P#p2.ibd
2.3 插入测试数据
INSERT INTO test1(sip,insertTime) VALUES ('1.1.1.4','2019-03-