美文网首页
Mysql分区表

Mysql分区表

作者: PyKailyn | 来源:发表于2017-04-23 19:43 被阅读0次

创建分区表

CREATE TABLE `partition_table_name` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` varchar(64) NOT NULL,
  `id_card_num` varchar(20) NOT NULL,
  `name` varchar(100) NOT NULL,
  `phone_num` varchar(30) NOT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`, `create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY RANGE ((year(create_time)*100+month(create_time))*100+day(create_time)) (
    PARTITION p20170411 VALUES LESS THAN (20170412),
    PARTITION s20170412 VALUES LESS THAN (20170413)
);

以上sql语句中,上半部分为普通的建表语句,唯一需要注意的是,需要把分区字段加入到PRIMARY KEY中。

下半部分sql语句则是创建表的各个分区,以上语句是按照create_time字段进行range类型的分区。(year(create_time)*100+month(create_time))*100+day(create_time)所得的值为range分区的VALUES,值类似于"20170411"这样的int整数。PARTITION p20170411 VALUES LESS THAN (20170412)则表示创建了name为p20170411的分区,当对此表(partition_table_name)执行插入语句时,当插入数据的create_time < “2017-04-12”时,该条数据将被写入到p20170411分区表中。

向表中插入数据时,若数据的create_time字段匹配到自己应该被放入哪个分区,则插入会失败并报错。

p20170411这样的分区表名可随意取,但任然建议有一定的名称代表意义。

向分区表中增加分区

ALTER TABLE bd_black_result
 ADD PARTITION (PARTITION s20170413 VALUES LESS THAN (20170414));

增加的分区必须严格按照递增的条件才能添加成功。如,不能ADD PARTITION (PARTITION s20170410 VALUES LESS THAN (20170411));只能 ADD PARTITION (PARTITION s20170413 VALUES LESS THAN (20170414));或20170415或20170416……


查看分区情况

select
  partition_name,  
  partition_expression,  
  partition_description,  
  table_rows
from information_schema.partitions where
table_name='partition_table_name'

查询结果将展示该表各个分区表的情况,包括各个分区表中的数据条数。


删除分区表

alter table partition_table_name drop partition p20170412;

删除partition_table_name表中名称为p20170412的分区表。同时,其数据也被删除。


删除分区数据

delete from partition_table_name PARTITION (p20170412)

删除partition_table_name中分区名称为p20170412的所有数据

当然,还可以有其他各种操作指定分区表的方法,如

select * from partition_table_name PARTITION (p20170412);
.
.
.

疑问
过程中,发现当数据量大的时候

select
  partition_name,  
  partition_expression,  
  partition_description,  
  table_rows
from information_schema.partitions where
table_name='partition_table_name'

以上语句统计出的p20170412分区的table_rows数据和以下语句统计出的有一定差别

select count(*) from partition_table_name PARTITION (p20170412);

原因暂不知。

相关文章

  • MySQL分区表

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

  • MySQL-分区表

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

  • Mysql 分区表

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

  • MySQL版本

    MySQL版本对比 服务器性能 1.mysql,percona mysql,mariadb均开源,支持分区表,My...

  • pg inherit

    借助表的继承特性PostgreSQL实现了分区表功能,虽然相比Oracle、MySQL的分区表来说其实现过程比较麻...

  • mysql分区表

    首先检查Mysql服务器是否支持分区表: mysql>show plugins 如果显示有partition项,那...

  • hive的严格模式和分区

    相比mysql,hive有严格模式存在,为了不错误扫描整个数据,hive的分区表会将数据分成几个分区。查询分区表中...

  • Mysql 分区表删除

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

  • mysql分区表测试

    mysql分区表测试 mysql部署情况 使用docker-compose在10.xx.xx.1机器进行部署, 端...

  • MySQL的分区、分表、集群、优化

    MySQL的分区 MySQL分区表是在数据库层面,MySQL自己实现的分表功能,在很大程度上简化了分表的难度。物理...

网友评论

      本文标题:Mysql分区表

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