關于分區表,表分區 請看: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