企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
关于分区表,表分区 请看:http://www.cnblogs.com/freeton/p/4265228.html 关于定时任务 请看:http://www.cnblogs.com/dreamhome/archive/2012/10/25/2739037.html 关于分区索引 请看 http://google3030.blog.163.com/blog/static/16172446520103591023745/ 一般来讲,要应用分区表这一技术通常都是在大数据表中进行应用 根据目前公司的业务需求,我们发现log表的数据量比较大,运行了几个月大概有100W数据 为了提升查询效率,准备在该表中应用上分区技术 在讲分区技术之前,先了解下什么是分区技术,顾名思义,犹如磁盘分区一般,将一个完整的数据区块,根据磁道数进行分区,mysql亦是如此。 在mysql中,在创建表时,进行分区划分,指定分区字段,以及分区存储的数据类型 mysql支持5种分区方式:RANGE分区、LIST分区、HASH分区、LINEAR HASH分区和KEY分区 第一步,创建分区表,使用RANGE分区,按年分区 ``` CREATE TABLE `zx_admin_log2` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `admin_id` INT(11) NOT NULL, `admin_name` VARCHAR(50) NOT NULL, `target_name` VARCHAR(255) DEFAULT NULL, `target_id` INT(11) DEFAULT NULL, `event` VARCHAR(255) DEFAULT NULL, `ctime` INT(11) NOT NULL, `ip` VARCHAR(32) NOT NULL, `type` INT(2) DEFAULT NULL COMMENT '该字段已废弃 module代替', `action` ENUM('C','V','U','D') DEFAULT NULL, `module` ENUM('USER','ORGANIZATION','DEPARTMENT','INTERVIEW','GROUP','SEARCH') DEFAULT NULL COMMENT '类型', `target_name_key` VARCHAR(50) DEFAULT NULL COMMENT '数据名称字段名', `table` VARCHAR(50) DEFAULT NULL COMMENT '数据所在表', PRIMARY KEY (`id`,`ctime`), KEY `count_index` (`admin_id`,`type`,`action`,`ctime`), KEY `ctime` (`ctime`) ) ENGINE=INNODB AUTO_INCREMENT=744577 DEFAULT CHARSET=utf8mb4 PARTITION BY RANGE (ctime) ( PARTITION p_2016 VALUES LESS THAN(UNIX_TIMESTAMP('2017-01-01')),#小于2017-01-01日的数据都被存放到2016年的分区表中 PARTITION p_2017 VALUES LESS THAN(UNIX_TIMESTAMP('2018-01-01')),#小于2018-01-01日的数据都被存放到2017年的分区表中 PARTITION p_2018 VALUES LESS THAN(UNIX_TIMESTAMP('2019-01-01')),#小于2019-01-01日的数据都被存放到2018年的分区表中 PARTITION p_2019 VALUES LESS THAN(UNIX_TIMESTAMP('2020-01-01')),#小于2020-01-01日的数据都被存放到2019年的分区表中 PARTITION p_2020 VALUES LESS THAN(UNIX_TIMESTAMP('2021-01-01'))#小于2021-01-01日的数据都被存放到2020年的分区表中 ) ``` 第二步,将老表的数据导入到新表: ``` START TRANSACTION; INSERT INTO zx_admin_log2 SELECT * FROM zx_admin_log; COMMIT; ``` 第三步,验证数据是否存到对应分区 ``` EXPLAIN PARTITIONS SELECT * FROM zx_admin_log2 WHERE ctime > UNIX_TIMESTAMP('2017-08-03'); ``` 第四步,能否正常插入数据到对应分区 ``` INSERT INTO zx_admin_log2 (admin_id,admin_name,target_name,target_id,`event`,ctime,ip,`type`,`action`,module,target_name_key,`table`) VALUES ('85','dfaf0',NULL,12343,NULL,UNIX_TIMESTAMP('2017-08-03 16:00:00'),'127.0.0.1',NULL,'C','USER','name','User'); ```