自动分区需要开启MySql中的事件调度器,可以通过如下命令查看是否开启了调度器

show variables like '%scheduler%';

如果没开启的话通过如下指令开启

SET GLOBAL event_scheduler = 1;

1、创建一个分区表

CREATE TABLE sales (
id INT AUTO_INCREMENT,
amount DOUBLE NOT NULL,
createTime DATETIME NOT NULL,
PRIMARY KEY(id, createTime)
) ENGINE=Innodb
PARTITION BY RANGE (YEAR(createTime))
(
PARTITION p_2010 VALUES LESS THAN (2011),#2011年以前一个分区
PARTITION p_2011 VALUES LESS THAN (2012) #2011-2012一个分区
)

查看当前表分区信息:

   SELECT PARTITION_NAME,PARTITION_DESCRIPTION,PARTITION_METHOD,TABLE_ROWS,CREATE_TIME
FROM information_schema.PARTITIONS
WHERE TABLE_SCHEMA = 'demo' AND TABLE_NAME = 'sales' ORDER BY partition_description DESC LIMIT 1000;

新建一个存储过程用于给分区表新增分区

DROP PROCEDURE IF EXISTS create_Partition ;
CREATE PROCEDURE create_Partition (IN databaseName VARCHAR(50),IN tableName VARCHAR(50),IN partitionNamePrefix VARCHAR(50))
L_END:BEGIN
DECLARE MAX_PARTITION_DESCRIPTION VARCHAR(255) DEFAULT "";
DECLARE P_NAME VARCHAR(255) DEFAULT "";
DECLARE P_DESCRIPTION VARCHAR(255) DEFAULT "";
DECLARE i INT DEFAULT 1;
DECLARE ISEXIST_PARTITION VARCHAR(255) DEFAULT "";
DECLARE PARTITION_COUNT INT DEFAULT 1; #一次性增加一个分区数 SELECT IFNULL(PARTITION_NAME,"") INTO ISEXIST_PARTITION FROM information_schema.PARTITIONS
WHERE TABLE_SCHEMA = databaseName AND TABLE_NAME = tableName LIMIT 1 ; IF ISEXIST_PARTITION <=> "" THEN
SELECT "Partition table not is exist" AS "*****ERROR*****";
LEAVE L_END;
END IF; SELECT IFNULL(partition_description,"") INTO MAX_PARTITION_DESCRIPTION FROM information_schema.PARTITIONS
WHERE TABLE_SCHEMA = databaseName AND TABLE_NAME = tableName ORDER BY partition_description DESC LIMIT 1; IF MAX_PARTITION_DESCRIPTION <=> "" THEN
SELECT "Partition table is error" AS "*****ERROR*****";
LEAVE L_END;
END IF; SET MAX_PARTITION_DESCRIPTION = REPLACE(MAX_PARTITION_DESCRIPTION, '\'', '');
WHILE i <= PARTITION_COUNT DO
SET P_DESCRIPTION = MAX_PARTITION_DESCRIPTION+i;
SET P_NAME = REPLACE(P_DESCRIPTION, '-', '');
SET @S=CONCAT('ALTER TABLE ',tableName,' ADD PARTITION (PARTITION ',partitionNamePrefix,P_NAME,' VALUES LESS THAN (',P_DESCRIPTION,'))');
SELECT @S;
PREPARE stmt2 FROM @S;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
SET i = i + 1 ;
END WHILE;
END L_END;

创建一个事件定时器用于定时创建分区

DELIMITER $$
CREATE EVENT auto_set_partitions
ON SCHEDULE
EVERY 5 MINUTE
COMMENT 'auto set partitions for table '
DO
BEGIN
CALL create_Partition('mysql','test','p');
END $$

这样每过5分钟就会在sales分区表上新增一个分区

MySql自动分区的更多相关文章

  1. 学习mysql水平分区和实践笔记

    SHOW PLUGINS; sql 可以查看partition的Status 是否是ACTIVE的 使用mydatetime 进行水平分区案例: CREATE TABLE test_users ( ` ...

  2. MySQL表分区技术

    MySQL表分区技术 MySQL有4种分区类型: 1.RANGE 分区 - 连续区间的分区 - 基于属于一个给定连续区间的列值,把多行分配给分区: 2.LIST 分区 - 离散区间的分区 - 类似于按 ...

  3. mysql表分区、查看分区

    原文地址:http://blog.csdn.net/feihong247/article/details/7885199 一.       mysql分区简介 数据库分区 数据库分区是一种物理数据库设 ...

  4. MySQL数据库分区的概念与2大好处(1)

    我们大家都知道通过MySQL数据库分区(Partition)可以提升MySQL数据库的性能,那么到底什么是MySQL数据库分区呢?以及其实际应用的好处的表现有哪些呢?以下的文章就是对这些内容的描述. ...

  5. mysql表分区简述

    一. 简介 数据库分区 数据库分区是一种物理数据库设计技术.虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减sql语句的响应时间,同时对于应用来说分区完全是 ...

  6. mysql表分区实战

    一,什么是数据库分区以mysql为例,mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面 (可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件 ...

  7. mysql数据库分区功能及实例详解

    分区听起来怎么感觉是硬盘呀,对没错除了硬盘可以分区数据库现在也支持分区了,分区可以解决大数据量的处理问题,下面一起来看一个mysql数据库分区功能及实例详解   一,什么是数据库分区 前段时间写过一篇 ...

  8. mysql 表分区 查看表分区 修改表分区

    原文地址:http://blog.csdn.net/feihong247/article/details/7885199 一.       mysql分区简介 数据库分区 数据库分区是一种物理数据库设 ...

  9. Mysql优化-分区

    分区简介 分区是根据一定的规则,数据库把一个表分解成多个更小的.更容易管理的部分.就访问数据库应用而言,逻辑上就只有一个表或者一个索引,但实际上这个表可能有N个物理分区对象组成,每个分区都是一个独立的 ...

随机推荐

  1. javascript 自调用函数 闭包

    <script type="text/javascript"> var car = {name:"lhs",model:500}; window.o ...

  2. saybyeto2015

    不知不觉一年又结束了,还是打算在最后一天写个总结. 今年换了工作,改变不可谓不多. 技术方面,看的书主要是 <Angularjs权威指南> <JavaScript设计模式与开发实践& ...

  3. NHibernate系列文章七:NHibernate对象状态

    摘要 NHibernate对象持久化 NHibernate对象的三个状态:临时态.持久态.游离态(托管态) NHibernate三状态的相互转化 1. NHibernate对象持久化 NHiberna ...

  4. Python文档

    详细的为代码编写文档,这其实是写好代码的重要部分. 常见编写代码的陷阱: 1.别忘了冒号.一定要记住在复合语句首行末未输入":" 2.从第一行开始.要确定顶层(无嵌套)程序代码从第 ...

  5. Hadoop HDFS编程 API入门系列之路径过滤上传多个文件到HDFS(二)

    不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs6; import java.io.IOException;import jav ...

  6. C#之Winform中treeview控件绑定数据库

    private DataSet ds; private SqlDataAdapter sqlDataAdapter1; private int maxnodeid; private void Form ...

  7. Android permission

    1. users-permission Users-permission is the permission that this app should acquire, so that the app ...

  8. JNI Local Reference Changes in ICS

    [This post is by Elliott Hughes, a Software Engineer on the Dalvik team. — Tim Bray] If you don’t wr ...

  9. java1.7集合源码阅读:LinkedList

    先看看类定义: public class LinkedList<E> extends AbstractSequentialList<E> implements List< ...

  10. Extjs学习笔记--Ext.tree.Panel

    Ext.create('Ext.tree.Panel', { title: 'Simple Tree', width: 200, height: 150, store: store, rootVisi ...