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


MySQL数据库分区是一种将大型表分解为更小和更可管理的部分的技术。它可以提高查询性能,减少维护时间和成本。以下是MySQL数据库分区的一些方法和步骤: 1. RANGE分区:按照给定的连续范围将数据行分配到分区中。例如,可以按照日期范围将数据行分配到不同的分区中。 2. LIST分区:与RANGE分区类似,但是使用枚举值而不是连续范围来定义分区。例如,可以按照国家/地区将数据行分配到不同的分区中。 3. HASH分区:使用用户定义的表达式计算每个数据行的哈希值,并将数据行分配到哈希值对应的分区中。例如,可以按照客户ID将数据行分配到不同的分区中。 4. KEY分区:类似于HASH分区,但是使用MySQL关键字来计算哈希值。例如,可以按照自增ID将数据行分配到不同的分区中。 以下是一个创建MySQL数据库分区的例子: ```sql CREATE TABLE sales ( id INT NOT NULL, region VARCHAR(100) NOT NULL, country VARCHAR(100) NOT NULL, amount DECIMAL(10,2) NOT NULL, date DATE NOT NULL ) PARTITION BY RANGE(YEAR(date)) ( PARTITION p0 VALUES LESS THAN (2010), PARTITION p1 VALUES LESS THAN (2011), PARTITION p2 VALUES LESS THAN (2012), PARTITION p3 VALUES LESS THAN (2013), PARTITION p4 VALUES LESS THAN MAXVALUE ); ``` 以上代码将sales表按照日期范围分为5个分区。第一个分区包含2010年之前的数据,第二个分区包含2010年的数据,以此类推,最后一个分区包含所有未包含在前面分区中的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值