美文网首页
MYSQL 表分区

MYSQL 表分区

作者: 风沙第一 | 来源:发表于2017-02-07 15:03 被阅读0次

mysql 分区表

以下实测在5.6.34-log版本上,采用range分区,分区列类型为datetime

1:如果表上有主键或唯一索引列,range方式分区必须加入

2:受mysql分区策略限制,分区的值必须是整数(int),分区算法里可以用函数,但函数支持范围为返回数值类型的

3:分区的名字不能是纯数字,亲测开头为字母后边跟上数字的可以,如果分区p9 value(9)已经创建,则不能创建range为8的分区,也就是说分区值是严格递增的

4:查看分区表上查询数据时,查看执行计划使用explain PARTITIONS ....

5:增加分区语句ALTER TABLE test ADD PARTITION  (PARTITION p719528 VALUES LESS THAN (719529))

6:删除分区ALTER TABLE test DROP PARTITION p736739,会同时删除磁盘上的文件

7:创建表

CREATE TABLE `test` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`val` VARCHAR(50) DEFAULT NULL,

`create_time` DATETIME NOT NULL,

PRIMARY KEY (`id`,`create_time`),

KEY `create_time` (`create_time`)

) ENGINE=INNODB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1

PARTITION BY RANGE ( TO_DAYS(create_time))

(PARTITION p0 VALUES LESS THAN (0) ENGINE = INNODB,

PARTITION p1 VALUES LESS THAN (1) ENGINE = INNODB,

PARTITION p719528 VALUES LESS THAN (719528) ENGINE = INNODB,

PARTITION p736732 VALUES LESS THAN (736732) ENGINE = INNODB,

PARTITION p736733 VALUES LESS THAN (736733) ENGINE = INNODB)

如果插入数据时,分区列值为NULL,则会插入到p0分区

8:查看表分区情况 SELECT t.partition_name,t.`PARTITION_DESCRIPTION` FROM information_schema.`PARTITIONS` t WHERE table_schema='test' ORDER BY t.`PARTITION_DESCRIPTION`

9:动态创建分区,每天增加一个分区,要用tigger调度

CREATE PROCEDURE `newPartitionJob`(parValue INT)

BEGIN

DECLARE partName VARCHAR(50);

DECLARE newPartValue INT;

IF parValue >=0 THEN

SET @newPartValue=parValue;

SET partName=CONCAT('p',parValue);

ELSE

/*基于最大的分区值 +1*/

SET @newPartValue=(SELECT t.`PARTITION_DESCRIPTION`+1 FROM information_schema.`PARTITIONS` t WHERE table_schema='test' ORDER BY t.`PARTITION_DESCRIPTION` DESC LIMIT 1);

SELECT @newPartValue;

/*分区名称*/

SET partName=CONCAT('p',@newPartValue);

SELECT partName;

END IF;

/*动态SQL*/

SET @sql = CONCAT('ALTER TABLE test ADD PARTITION  (PARTITION ',partName,' VALUES LESS THAN (',@newPartValue,'))');

SELECT @sql;

/*执行SQL*/

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

END

相关文章

  • MySQL分区表

    确认mysql是否支持分区表 mysql分区表的特点 创建mysql数据表为hash表 常用mysql分区的类型 ...

  • mysql表分区

    mysql表分区主要分为RANGE分区,LIST分区,HASH分区,LINEAR HASH分区,KEY分区 目前,...

  • Mysql 分区表删除

    分区表删除部分分区 使用场景:从 MySQL 5.1 开始,支持分区 创建日志表时建议使用分区方式 在上表的分区表...

  • Mysql分区分析

    关于什么是分区和分表,可以先参考下面前两篇文章。 MySQL 分库分表与分区的区别和思考搞懂MySQL分区MySQ...

  • MySQL的分区、分表、集群、优化

    MySQL的分区 MySQL分区表是在数据库层面,MySQL自己实现的分表功能,在很大程度上简化了分表的难度。物理...

  • Mysql 分区表

    MySQL分区表支持RANGE,LIST,HASH,KEY,COLUMNS多种分区算法。 分区表的唯一索引和主键索...

  • MySQL-分区表

    MySQL-分区表 分区表(于MySQL 5.1引入,v 5.5后可以逐步考虑用于生产环境) 是一个独立的逻辑表,...

  • Mysql 相关

    MySQL索引 MySQL索引背后的数据结构及算法原理 覆盖索引和回表操作 MySQL性能优化 MySql表分区详...

  • MySQL表的四种分区类型

    一、什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表。mysql5.1开始支持数据表分区了。 如:...

  • Mysql表分区状态查询

    一、查询mysql表是否为分区表:可以查看表具有哪几个分区、分区的方法、分区中数据的记录数等信息SELECT PA...

网友评论

      本文标题:MYSQL 表分区

      本文链接:https://www.haomeiwen.com/subject/eyxmittx.html