关于MySql数据库表分区

1.关于分区注解 

有分区的sql语句,后面都会有一段注解描述:/*! 50100 PARTITION BY... */

CREATE TABLE `test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `tm` date NOT NULL,
  PRIMARY KEY (`id`,`tm`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
/*!50100 PARTITION BY RANGE (to_days(tm))
(PARTITION p0 VALUES LESS THAN (738214) ENGINE = InnoDB,
 PARTITION p1 VALUES LESS THAN (738245) ENGINE = InnoDB,
 PARTITION p2 VALUES LESS THAN (738275) ENGINE = InnoDB) */;

1、/*...*/ 是注释,mysql不会执行。
2、mysql对标准sql进行了扩展,包含了一些自己的特性。
3、/*!...*/ 是一种特殊的注释,其他的数据库产品当然不会执行。mysql特殊处理,会选择性的执行。可以认为是:预编译中的条件编译。
4、特别注意 50100,它表示5.01.00 版本或者更高的版本,才执行

2.创建分区

ALTER TABLE tb_name PARTITION by RANGE(to_days(createTime))
(
  PARTITION p20200527 VALUES LESS THAN (to_days('2020-05-28')),
  PARTITION p20200528 VALUES LESS THAN (to_days('2020-05-29')),
  PARTITION p20200529 VALUES LESS THAN (to_days('2020-05-30'))
);

1、tb_name安排RANGE方式分区

2、按照createTime的TO_DAY()函数值进行连续分区

3.查看表分区情况和数据分布

SELECT
	partition_name part,
	partition_expression expr,
	partition_description descr,
	table_rows 
FROM
	information_schema.PARTITIONS 
WHERE
	table_schema = SCHEMA ( ) 
	AND table_name = 'test';

4.查询指定分区数据

SELECT
	* 
FROM
	表名 PARTITION ( 分区名 );

5.管理分区

新增分区

ALTER TABLE sale_data
ADD PARTITION (PARTITION p201010 VALUES LESS THAN (201011));

删除分区

--清除所有分区,不删除数据

ALTER TABLE tb_name REMOVE PARTITIONING;

--当删除了一个分区,也同时删除了该分区中所有的数据。
ALTER TABLE sale_data DROP PARTITION p201010;

分区的合并

下面的SQL,将p201001 - p201009 合并为3个分区p2010Q1 - p2010Q3

ALTER TABLE sale_data
REORGANIZE PARTITION p201001,p201002,p201003,
p201004,p201005,p201006,
p201007,p201008,p201009 INTO
(
PARTITION p2010Q1 VALUES LESS THAN (201004),
PARTITION p2010Q2 VALUES LESS THAN (201007),
PARTITION p2010Q3 VALUES LESS THAN (201010)
);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值