MYSQL数据库创建表分区

MYSQL数据库通过日期创建表分区,日期需要使用日期函数(年月日时分秒)

1.用日期创建分区事例

DROP TABLE IF EXISTS `t_tfm_city_trafficindex`;

CREATE TABLE `t_tfm_city_trafficindex` (
  `cityname` varchar(20) DEFAULT COMMENT 城市名称,
  `time` varchar(10) NOT NULL COMMENT 时间(HH24:mi),
  `type` varchar(20) NOT NULL COMMENT 星期几,
  `grade` float(5,2) NOT NULL COMMENT 城市一般交通指数值(0-10),
  `updatetime` datetime NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 更新时间,
  PRIMARY KEY (`time`,`type`,`updatetime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=城市7*24小时一般交通指数
/*!50100 PARTITION BY RANGE (to_days(updatetime))
(PARTITION partition201607 VALUES LESS THAN (736542) ENGINE = InnoDB,
 PARTITION partition201608 VALUES LESS THAN (736573) ENGINE = InnoDB,
 PARTITION partition201609 VALUES LESS THAN (736603) ENGINE = InnoDB,
 PARTITION partition201610 VALUES LESS THAN (736634) ENGINE = InnoDB,
 PARTITION partition201611 VALUES LESS THAN (736664) ENGINE = InnoDB,
 PARTITION partition201612 VALUES LESS THAN (736695) ENGINE = InnoDB,
 PARTITION partition201701 VALUES LESS THAN (736726) ENGINE = InnoDB,

PARTITION partition201702 VALUES LESS THAN (736754) ENGINE = InnoDB) */;

//其中736542为to_days(2016-08-01),其他依次顺序排列。。。

2.分区函数

Mysql可用的分区函数

DAY() DAYOFMONTH() DAYOFWEEK() DAYOFYEAR() DATEDIFF() EXTRACT() HOUR() MICROSECOND() MINUTE() MOD() MONTH() QUARTER() SECOND() TIME_TO_SEC() TO_DAYS() WEEKDAY() YEAR() YEARWEEK() 等 当然,还有FLOOR(),CEILING() 等,前提是使用这两个分区函数的分区健必须是整型。 要小心使用其中的一些函数,避免犯逻辑性的错误,引起全表扫描。

3.分区类型 Range:基于一个连续区间的列值,把多行分配给分区; LIST:列值匹配一个离散集合; Hash:基于用户定义的表达式的返回值选择分区,表达式对要插入表中的列值进行计算。这个函数可以包含SQL中有效的,产生非负整 数值的任何表达式。 KEY:类似于HASH分区,区别在于KEY 分区的表达式可以是一列或多列,且MYSQL提供自身的HASH函数。 4.RANGE分区MAXVALUE值 及加分区测试; 创建表 PRANGE,最后分区一个分区值是MAXVALUE


经验分享 程序员 微信小程序 职场和发展