mysql 分区表 统计_MySQL分区表

MySQL分区表

1.Range分区

最常用的一种分区方式

比如按照日期进行分区

CREATE TABLE award_gift_record (

`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',

`NickName` varchar(100) NOT NULL DEFAULT '',

`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '礼物ID',

`ActionTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`ID`,`ActionTime`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽奖记录表'

partition by range(UNIX_TIMESTAMP(ActionTime))

(

partition p201506 VALUES LESS THAN(UNIX_TIMESTAMP('2015-06-01 00:00:00')),

partition p201507 VALUES LESS THAN(UNIX_TIMESTAMP('2015-07-01 00:00:00')),

partition p201508 VALUES LESS THAN(UNIX_TIMESTAMP('2015-08-01 00:00:00'))

);

增加分区

alter table award_gift_record ADD PARTITION (PARTITION p201509 VALUES LESS THAN (UNIX_TIMESTAMP('2015-09-01 00:00:00')));

alter table award_gift_record ADD PARTITION (PARTITION pmax VALUES LESS THAN MAXVALUE);

删除分区

alter table award_gift_record DROP PARTITION p201506;

2.List分区

CREATE TABLE award_gift_record (

`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',

`NickName` varchar(100) NOT NULL DEFAULT '',

`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '礼物ID',

`ActionTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`ID`,`AwardGiftID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽奖记录表'

partition by list(AwardGiftID)

(

partition p0 values in (0),

partition p1_3 values in (1,2,3)

);

增加分区

alter table award_gift_record ADD PARTITION (PARTITION p4_6 values in (4,5,6));

alter table award_gift_record ADD PARTITION (PARTITION pnull VALUES in (null));

删除分区

alter table award_gift_record DROP PARTITION p0;

3.Hash分区

自定义函数进行Hash分区

CREATE TABLE award_gift_record (

`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',

`NickName` varchar(100) NOT NULL DEFAULT '',

`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '礼物ID',

`ActionTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`ID`,`ActionTime`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽奖记录表'

partition by hash(UNIX_TIMESTAMP(ActionTime))

partitions 6;

4.Key分区

使用MySQL内部的散列函数

CREATE TABLE award_gift_record (

`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',

`NickName` varchar(100) NOT NULL DEFAULT '',

`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '礼物ID',

`ActionTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`ID`,`AwardGiftID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽奖记录表'

partition by key(AwardGiftID)

partitions 6;

5.Columns分区

前面四种分区类型,分区的条件必须是整形,如果字段不是整形,则通过函数进行转化。

MySQL 5.5开始支持Columns分区,可以使用非整形字段进行分区.

Columns分区支持一下数据类型

所有的整形(INT,SMALLINT,TINYINT,BIGINT)

日期类型(DATE,DATETIME) 注意时间戳类型是不支持的,时间戳需要使用Range分区

字符串类型(CHAR,VARCHAR,BINARY,VARBINARY) BLOB,TEXT类型不支持

CREATE TABLE award_gift_record (

`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',

`NickName` varchar(100) NOT NULL DEFAULT '',

`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '礼物ID',

`ActionTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`ID`,`ActionTime`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽奖记录表'

partition by range columns(ActionTime)

(

partition p201506 values less than ('2015-06-01'),

partition p201507 values less than ('2015-07-01')

);

CREATE TABLE award_gift_record (

`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',

`NickName` varchar(100) NOT NULL DEFAULT '',

`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '礼物ID',

`ActionTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`ID`,`NickName`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽奖记录表'

partition by list columns(NickName)

(

partition pa values in ('a','b','c')

);

6.子分区

MySQL数据库可以在Range和List分区的基础上,再进行Hash或者Key的子分区。

子分区好像没有想象中的那么有用..

分区中的null值

MySQL数据库分区总是把null值视为小于任何一个非空值。

Range分区,null值作为最小的值,放入第一个分区.

List分区,需要有null的列表,否则插入报错.

alter table award_gift_record ADD PARTITION (PARTITION pnull VALUES in (null));

Hash,Key分区

null值作为0处理

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29254281/viewspace-1709895/,如需转载,请注明出处,否则将追究法律责任。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值