美文网首页
Mysql创建分区表

Mysql创建分区表

作者: 我是大彬子 | 来源:发表于2017-02-22 11:37 被阅读0次

今天看到生产数据库中,其中一个日志表的数据超过130W,并且增长迅速。担心数据过大会影响CR效率(日志表,所以没有删除&更新),想到MYSQL的分区表。创建分区表后,可以将数据根据某一字段进行逻辑分区,为数据表创建多个数据文件,So....效率会高一些。还有个问题就是不影响业务逻辑,代码不用修改,那条数据查询那个分区表,都由MYSQL负责。。所以我就开始。。折腾了!

写在前面

创建分区表时,如果分区字段与主键字段不同,则遇到以下错误

[Err] 1503 - A PRIMARY KEY must include all columns in the table's partitioning function

解决方案1:将分区字段与主键字段作为联合主键,这显然不是正常逻辑,一般都是按照时间字段进行分区,那么时间+ID进行联合主键是什么鬼。所以我们还有个妥协方案

解决方案2:将主键删除,创建索引,加上自增属性,创建分区,Well done。

开始

删除主键,创建索引

alter table [table_name] drop primary key , ADD INDEX([primary key name]);

创建自增字段

ALTER TABLE [table_name] MODIFY COLUMN `[primary key name]`  int(11) NOT NULL AUTO_INCREMENT FIRST ;

关键的来了!!

ALTER TABLE rpt_log PARTITION BY RANGE (to_days(receive_time)) (
PARTITION rpt_log_17_2 VALUES LESS THAN (to_days('2017-2-1')),
PARTITION rpt_log_17_3 VALUES LESS THAN (to_days('2017-3-1')),
PARTITION rpt_log_17_4 VALUES LESS THAN (to_days('2017-4-1')),
...
...
...
PARTITION rpt_log_max VALUES LESS THAN MAXVALUE);
PARTITION log_17_2 VALUES LESS THAN (to_days('2017-2-1')),

这一句表明,如果时间小于“2017-02-01”则放入“log_17_2”中,你也可以设定多个时间,到永远。。当然,如果永远还不够远怎么办?MAXVALUE来帮你

PARTITION log_max VALUES LESS THAN MAXVALUE)

那么这一句就不难理解,当超出设置时间,则放入“log_max”中。

语句执行成功了,那么如何验证是否成功呢?这里有个方法,进入MYSQL的DATA目录

Data.png

可以看到,分区表都建立成功了,并且17_2/17_3已经有数据了。

具体效率怎么样,日后再说!!!
都是原创,有不对的地方,可以联系我,一起探讨。

相关文章

  • MySQL分区表

    确认mysql是否支持分区表 mysql分区表的特点 创建mysql数据表为hash表 常用mysql分区的类型 ...

  • Mysql 分区表删除

    分区表删除部分分区 使用场景:从 MySQL 5.1 开始,支持分区 创建日志表时建议使用分区方式 在上表的分区表...

  • Flink --通过讲mysql数据插入到iceberg

    1. 创建表 2.创建分区表 3. 插入数据 4. 将mysql 数据插入到iceberg 表中

  • Mysql创建分区表

    今天看到生产数据库中,其中一个日志表的数据超过130W,并且增长迅速。担心数据过大会影响CR效率(日志表,所以没有...

  • PostgreSQL实现数据表分区

    1.建表 2.创建子表(分区表) 根据主表的创建日期月份来建立分区 3.给分区表创建主键 继承主表的分区表无法继承...

  • Hive创建分区表,动态插入数据

    1、创建分区表

  • create table tmp_table_name as .

    1.hive中用CTAS 创建表,所创建的表统一都是非分区表,不管源表是否是分区表。所以对于分区表的创建使用cre...

  • MySQL-分区表

    MySQL-分区表 分区表(于MySQL 5.1引入,v 5.5后可以逐步考虑用于生产环境) 是一个独立的逻辑表,...

  • SQL Server数据库分区表

    一、创建分区表: 1、先创建给分区表使用的分区目录:E:\TMS_DATA 2、创建数据库文件组:语法:alter...

  • Mysql 分区表

    MySQL分区表支持RANGE,LIST,HASH,KEY,COLUMNS多种分区算法。 分区表的唯一索引和主键索...

网友评论

      本文标题:Mysql创建分区表

      本文链接:https://www.haomeiwen.com/subject/zawpwttx.html