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

SELECT

     count(*) as total,

     user_name,

request_url,

DATE_FORMAT(create_time,'%Y-%m-%d') as days

FROM

     s_log_request_time

WHERE

     request_url IN (

          '/api/operation/publishRules/publishIndex',

          '/api/operation/skuListing/index',

          '/api/operation/skuListing/detail'

     )

group by user_name,request_url,days

你可能感兴趣的:(MYSQL数据库创建表分区)