MySQL每天自动增加分区

有一个表tb_3a_huandan_detail,每天有300W左右的数据。查询太慢了,网上了解了一下,可以做表分区。由于数据较大,所以决定做定时任务每天执行存过自动进行分区。

1、在进行自动增加分区前一定得先对表手动分几个区

1 ALTER TABLE tb_3a_huandan_detail PARTITION BY RANGE (TO_DAYS(ServiceStartTime))
2 (
3     PARTITION p20160523 VALUES LESS THAN (TO_DAYS(‘2016-05-23‘)),
4     PARTITION p20160524 VALUES LESS THAN (TO_DAYS(‘2016-05-24‘)),
5     PARTITION p20160525 VALUES LESS THAN (TO_DAYS(‘2016-05-25‘)),
6     PARTITION p20160526 VALUES LESS THAN (TO_DAYS(‘2016-05-26‘)),
7     PARTITION p20160527 VALUES LESS THAN (TO_DAYS(‘2016-05-27‘))
8 )

2、分区存过如下:

 1 DELIMITER $$
 2
 3 USE `nres`$$
 4
 5 DROP PROCEDURE IF EXISTS `create_Partition_3Ahuadan`$$
 6
 7 CREATE DEFINER=`nres`@`%` PROCEDURE `create_Partition_3Ahuadan`()
 8 BEGIN
 9 /* 事务回滚,其实放这里没什么作用,ALTER TABLE是隐式提交,回滚不了的。*/
10     DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
11     START TRANSACTION;
12
13 /* 到系统表查出这个表的最大分区,得到最大分区的日期。在创建分区的时候,名称就以日期格式存放,方便后面维护 */
14     SELECT REPLACE(partition_name,‘p‘,‘‘) INTO @P12_Name FROM INFORMATION_SCHEMA.PARTITIONS
15     WHERE table_name=‘tb_3a_huandan_detail‘ ORDER BY partition_ordinal_position DESC LIMIT 1;
16      SET @Max_date= DATE(DATE_ADD(@P12_Name+0, INTERVAL 1 DAY))+0;
17 /* 修改表,在最大分区的后面增加一个分区,时间范围加1天 */
18     SET @s1=CONCAT(‘ALTER TABLE tb_3a_huandan_detail ADD PARTITION (PARTITION p‘,@Max_date,‘ VALUES LESS THAN (TO_DAYS (‘‘‘,DATE(@Max_date),‘‘‘)))‘);
19     /* 输出查看增加分区语句*/
20     SELECT @s1;
21     PREPARE stmt2 FROM @s1;
22     EXECUTE stmt2;
23     DEALLOCATE PREPARE stmt2;
24 /* 取出最小的分区的名称,并删除掉 。
25     注意:删除分区会同时删除分区内的数据,慎重 */
26     /*select partition_name into @P0_Name from INFORMATION_SCHEMA.PARTITIONS
27     where table_name=‘tb_3a_huandan_detail‘ order by partition_ordinal_position limit 1;
28     SET @s=concat(‘ALTER TABLE tb_3a_huandan_detail DROP PARTITION ‘,@P0_Name);
29     PREPARE stmt1 FROM @s;
30     EXECUTE stmt1;
31     DEALLOCATE PREPARE stmt1; */
32 /* 提交 */
33     COMMIT ;
34  END$$
35
36 DELIMITER ;

3、增加定时事件

 1 DELIMITER ||
 2 CREATE EVENT Partition_3Ahuadan_event
 3           ON SCHEDULE
 4           EVERY 15 day STARTS ‘2016-05-27 23:59:59‘
 5           DO
 6       BEGIN
 7
 8           CALL nres.`create_Partition_3Ahuadan`;
 9
10  END ||
11 DELIMITER ;  

参考:

http://blog.csdn.net/m582445672/article/details/7670743

http://blog.chinaunix.net/uid-24086995-id-127389.html

时间: 2024-12-04 20:41:05

MySQL每天自动增加分区的相关文章

MySQL 数据库分表分区

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持!一.分表 为什么要分表? 我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. 什么是分表? 分表是将一个达标按照一定的规则分解成多张具有独立存储空间的实体表,每个表都对应三个文件,.MYD数据文件..MYI索引文件..frm表结构文件.这些表可以分

MYSQL主键自动增加的配置

文章一 原文地址: http://ej38.com/showinfo/mysql-202971.html 文章二:   点击转入第二篇文章 在数据库应用,我们经常要用到唯一编号.在MySQL中可通过字段的AUTO_INCREMENT属性来自动生成.MySQL支持多种数据表,每种数据表的自增属性都有所不同. ISAM表 如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号.编号从1开始,并1为基数递增. 当插入记录时,没有为AUTO_INCREME

MySQL 设置表的属性值自动增加

属性值自动增加,比如 id 这一列,每新增一条记录,id 字段值自动加 1. 注意:设置自动增加的字段必须为主键的一部分 语法:字段名  数据类型  AUTO_INCREMENT

mysql数据库分表分区

防伪码:博观而约取,厚积而薄发 为什么要分表和分区? 我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且 由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. mysql 中有一种机制是表锁定和行锁定,是为了保证数据的完整性.表锁定表示你们都不能 对这张表进行操作,必须等我对表操作完才行.行锁定也一样,别的 sql 必须等我对这条数 据操作完了,才能对这条数据进行操作.当出现这种情况时,我们可以考虑分表或分区. 1.分表 什么是分表? 分表是将一个大表按

[MySQL Reference Manual] 20 分区

20 分区 20 分区... 1 20.1 MySQL的分区概述... 2 20.2 分区类型... 3 20.2.1 RANGE分区... 3 20.2.2 LIST分区... 5 20.2.3 COLUMNS分区... 7 20.2.3.1 RANGE COLUMNS分区... 7 20.2.3.2 LIST COLUMNS分区... 7 20.2.4 Hash分区... 8 20.2.4.1 LINEAR HASH分区... 8 20.2.5 Key分区... 9 20.2.6 子分区..

设置表的属性值自动增加

设置表的属性值自动增加,比如插入第一条记录时 id 为 1,插入第二条记录时 id 为 2,以此类推,没增加一条记录,字段值自动加 1 mysql> CREATE TABLE tb_emp8    -> (    -> id INT(11) PRIMARY KEY AUTO_INCREMENT,   # 指定员工的编号自动递增    -> name VARCHAR(25) NOT NULL,    -> deptId INT(11),    -> salary FLOA

debian mysql 定时自动备份的脚本

#!/bin/sh LOG=/var/log/mysql-backup.log # mysql db info USER_ROOT=XXXXXX USER_PWD=XXXXXXX # mysql data stored dir TODAY=`date +%F` STOREDIR=/mnt/tf-card/mysql-back/$TODAY mkdir $STOREDIR echo "*** PATH:$STOREDIR mysql-backup ***" >> $LOG #

Mysql分表和分区的区别、分库分表介绍与区别

分表和分区的区别: 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上,具体请参考mysql分区功能详细介绍,以及实例 二,mysql分表和分区有什么区别呢 1,实现方式上 a),mysql的分表是真正的分表,一张表分成很多表后,每一个小表都是完正的一张表,都对应三个文件,一个.MYD数据文件,.MYI索引文件,.frm表

设置iOS项目BuildVersion自动增加-备用

一.概念阐述:Build与Version的区别 在iOS中有两种“版本号”,也就是所谓的version号与build号,如下图所示: 我们用最简洁的语言来区分这两个版本号的区别以及用途如下: Version号:也称为Bundle versions string, sthort.  appstore以及itune中产品介绍所用的版本号,多面向用户,多为两段式或者三段式,1.0.1,1.2等,通常作为版本升级的主要依据 Build号:也称为Bundle version.  开发者团队内部使用,方便追