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
