mysql创建表分区

MySQL创建表分区

create table erp_bill_index(
    id int primary key auto_increment,
    addtime datetime
);
insert into erp_bill_index(addtime)
values
(‘2018-02-01 12:00:00‘),
(‘2018-03-01 12:00:00‘),
(‘2018-04-01 12:00:00‘),
(‘2018-05-01 12:00:00‘),
(‘2018-06-01 12:00:00‘),
(‘2018-07-01 12:00:00‘),
(‘2018-08-01 12:00:00‘),
(‘2018-09-01 12:00:00‘),
(‘2018-10-01 12:00:00‘),
(‘2018-11-01 12:00:00‘),
(‘2018-12-01 12:00:00‘),
(‘2019-01-01 12:00:00‘),
(‘2019-02-01 12:00:00‘),
(‘2019-03-01 12:00:00‘),
(‘2019-04-01 12:00:00‘),
(‘2019-05-01 12:00:00‘),
(‘2019-06-01 12:00:00‘),
(‘2019-07-01 12:00:00‘),
(‘2019-08-01 12:00:00‘),
(‘2019-09-01 12:00:00‘),
(‘2019-10-01 12:00:00‘),
(‘2019-11-01 12:00:00‘),
(‘2019-12-01 12:00:00‘);

alter table erp_bill_index drop primary key;-- 删除主键,在删除主键的时候,这个自增会让该语句执行失败,先取消字段自增,然后执行该语句后,再加上自增
alter table erp_bill_index add primary key(id,addtime);-- 添加主键,(分区要求:分区中使用的字段必须都包含在主键当中)

-- 创建分区(分区要求:分区中使用的字段必须都包含在主键当中)
ALTER TABLE erp_bill_index PARTITION by RANGE(to_days(addtime))
(
  PARTITION p201801 VALUES LESS THAN (to_days(‘2018-02-01‘)),
  PARTITION p201802 VALUES LESS THAN (to_days(‘2018-03-01‘)),
  PARTITION p201803 VALUES LESS THAN (to_days(‘2018-04-01‘)),
  PARTITION p201804 VALUES LESS THAN (to_days(‘2018-05-01‘)),
  PARTITION p201805 VALUES LESS THAN (to_days(‘2018-06-01‘)),
  PARTITION p201806 VALUES LESS THAN (to_days(‘2018-07-01‘)),
  PARTITION p201807 VALUES LESS THAN (to_days(‘2018-08-01‘)),
  PARTITION p201808 VALUES LESS THAN (to_days(‘2018-09-01‘)),
  PARTITION p201809 VALUES LESS THAN (to_days(‘2018-10-01‘)),
  PARTITION p201810 VALUES LESS THAN (to_days(‘2018-11-01‘)),
  PARTITION p201811 VALUES LESS THAN (to_days(‘2018-12-01‘)),
  PARTITION p201812 VALUES LESS THAN (to_days(‘2019-01-01‘)),
  PARTITION p201901 VALUES LESS THAN (to_days(‘2019-02-01‘)),
  PARTITION p201902 VALUES LESS THAN (to_days(‘2019-03-01‘)),
  PARTITION p201903 VALUES LESS THAN (to_days(‘2019-04-01‘)),
  PARTITION p300012 VALUES LESS THAN (9223372036854775807) -- 剩下的放在一个分区中,当需要对这部分进行再次分区的时候,需要先删除该分区,然后再添加多个分区
);

-- 删除分区
ALTER TABLE erp_bill_index DROP PARTITION p300012;
-- 添加新的分区
alter table erp_bill_index add PARTITION
(
    PARTITION p201905 VALUES LESS THAN (to_days(‘2019-06-01‘)) ENGINE = InnoDB,
    PARTITION p300012 VALUES LESS THAN (9223372036854775807)
);

原文地址:https://www.cnblogs.com/TheoryDance/p/11719572.html

时间: 2024-10-07 11:59:50

mysql创建表分区的相关文章

mysql innodb表分区

分区的一些优点包括:      1).与单个磁盘或文件系统分区相比,可以存储更多的数据.      2).对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据.相反地,在某些情况下,添加新数据的过程又可以通过为那些新数据专门增加一个新的分区,来很方便地实现.通常和分区有关的其他优点包括下面列出的这些.MySQL分区中的这些功能目前还没有实现,但是在我们的优先级列表中,具有高的优先级:我们希望在5.1的生产版本中,能包括这些功能.      3).一些查询可以

MySQL的表分区详解

这篇文章主要介绍了MySQL的表分区,例如什么是表分区.为什么要对表进行分区.表分区的4种类型详解等,需要的朋友可以参考下 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然也可根据其他的条件分区. 二.为什么要对表进行分区为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率.分区的一些优点包括:      1).与单个磁

oracle11g interval(numtoyminterval())自动创建表分区

Oracle11g通过间隔分区实现按月创建表分区 在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理.由于表中的数据是历史交易,故按月分区,提升查询和管理. 由于之前对于表分区了解不多,为了实现上述功能查了很多资料,一开始的方向是通过Crontab调用Shell脚本来按月自动创建分区,或者使用Oracle的Job调用存储过程来自动创建分区.在研究上述两套方案的过程中,无意发现Oracle11g有间隔分区功能,对于使用Range分区的可以按年,月,日来自动生成分区.语法如下: ?

(转)mysql创建表时反引号的作用

(转)mysql创建表时反引号的作用 试用navicat工具查看现网mysql建表语句时,发现表名和字段名都是反引号引起来的 1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE `tab_notice_title_tv` (   `i_id` int(11) NOT NULL AUTO_INCREMENT,   `c_opcom_key` varchar(32) DEFAULT NULL,   `c_view_type` int(11) DEFAULT '1' COMMEN

MySQL 创建表时,设置时间字段自己主动插入当前时间

MySQL 创建表时,设置时间字段自己主动插入当前时间 DROP TABLE IF EXISTS `CONTENT`; CREATE TABLE `CONTENT` ( `ID` char(20) NOT NULL, `CURRENT_TIME` timestamp not null default current_timestamp, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

MySQL创建表和删除表

创建表 简单的方式 CREATE TABLE person ( number INT(11), name VARCHAR(255), birthday DATE ); 或者是 CREATE TABLE IF NOT EXISTS person ( number INT(11), name VARCHAR(255), birthday DATE ); 查看mysql创建表: SHOW CREATE table person; CREATE TABLE `person` ( `number` int

oracle与mysql创建表时的区别

oracle创建表时,不支持在建表时同时增加字段注释.故采用以下方式: #创建表CREATE TABLE predict_data as ( id integer NOT NULL, uid varchar2(80), mid varchar2(80), time date , content varchar2(300), constraint predict_data primary key (id) );#字段注释comment on table predict_data is '预测表';

Oracle 11g 通过间隔分区实现按月创建表分区

在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理.由于表中的数据是历史交易,故按月分区,提升查询和管理. 由于之前对于表分区了解不多,为了实现上述功能查了很多资料,一开始的方向是通过Crontab调用Shell脚本来按月自动创建分区,或者使用Oracle的Job调用存储过程来自动创建分区.在研究上述两套方案的过程中,无意发现Oracle11g有间隔分区功能,对于使用Range分区的可以按年,月,日来自动生成分区.语法如下: CREAT TABLE TABLE1 ( TABLE

MySQL 创建表时,设置时间字段自动插入当前时间

MySQL 创建表时,设置时间字段自动插入当前时间 DROP TABLE IF EXISTS `CONTENT`; CREATE TABLE `CONTENT` ( `ID` char(20) NOT NULL, `CURRENT_TIME` timestamp not null default current_timestamp, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;