关于分区表,表分区 请看: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');
```
- 前端
- 技巧汇总
- 构建 Node + Webpack + React 热加载开发环境
- React
- Redux
- Webpack
- ES6
- HTML5+CSS3
- Javascript
- JS超简洁拖动代码
- jQuery
- 后端
- 技巧汇总
- 代码中特殊的注释技术——TODO、FIXME和XXX的用处
- PHP
- Xdebug不解之谜
- PHP时间获取
- PHP递归优化 使用匿名函数进行递归
- PHP 发起POST请求
- PHP获得数组的交集与差集
- PHP递归获取下级数组,可指定ID,一维数组
- PHP 判断是否为Get/Post/Ajax提交
- PHP实现分流队列平均显示信息
- PHP多维数组 指定列排序
- PHP 类Class详解 笔记记录
- PHP取整函数详解
- Node
- Elasticsearch
- 数据库
- 技巧汇总
- Mysql
- Mysql分区表实现
- Mysql union与union all 查询
- Mysql 表中表查询
- Mysql 分组查询 与 分组条件查询
- MySQL 添加列,修改列,删除列
- Mysql优化之:构建海量表,定位慢查询
- Mysql优化之:表的设计满足3NF
- Mysql优化常见方法
- Mysql存储过程详解
- 运维
- 技巧汇总
- Linux
- Linux Centos系统下 设置代理服务器上网
- Centos7增加开机启动脚本
- centos 挂载windows共享目录
- CentOS设置SSH Key登录
- Linux/CentOS单网卡绑定多个IP
- Windows
- Win10开机启动项设置全解攻略
- PuTTY连接Linux服务器经常断线解决方案
- Docker
- Docke启动文件 docker-compose.yml
- Docker命令简介(未完)
- Docker闲杂笔记
- Apache
- Nginx
- Nginx配置upstream实现负载均衡
- Nginx负载均衡学习
- IDE
- 技巧汇总
- WebStorm
- PHPStorm
- 协作
- 技巧汇总
- Git
- git 放弃本地修改 强制更新
- git编译安装与常用命令
- Svn