mysql分区表实际应用

今天 一个小伙伴过来找我,说mysql建分区表时遇到奇怪的问题。

场景大概如下:表中先有数据,现在考虑建分区,结果连续建了两个分区后,开始往分区表中插入数据,能入成功,但是通过数据字典查询时却查询不到,后来他又尝试着新添加两个分区,但是发现添加分区失败了。

后来经过和他一起排查,才发现,原来分区建立失败的原因即然是语法错误导致的。

之前由于一般都是先规划分区表,才开始写数据,所以很暂时没想到会是这个场景 ,也就借此还原一下他所反应的问题。

测试过程如下:

1.建立原有表:

CREATE TABLE test01 (
  dayid int,
  `mac` varchar(32) NOT NULL DEFAULT '',
  `dtype` varchar(50) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

并往里面插入10000条数据;

2.开始针对dayid建立List分区。

alter table test01 partition by list(dayid) (partition p20171205 values in (20171205));

最新的分区表如下:

CREATE TABLE `test01` (
  `dayid` int(11) DEFAULT NULL,
  `mac` varchar(32) NOT NULL DEFAULT '',
  `dtype` varchar(50) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY LIST (dayid)
(PARTITION p20171205 VALUES IN (20171205) ENGINE = InnoDB,
 PARTITION p20171204 VALUES IN (20171204) ENGINE = InnoDB,
 PARTITION p20171206 VALUES IN (20171206) ENGINE = InnoDB,
 PARTITION p20171207 VALUES IN (20171207) ENGINE = InnoDB) */

3.详细的分区表信息如下,每一个分区都都建立了一个子表 ,而且数据已经全部写到分区子表中。

12K     test01.frm
4.0K    test01.par
96K     test01#P#p20171204.ibd
9.0M    test01#P#p20171205.ibd
96K     test01#P#p20171206.ibd
96K     test01#P#p20171207.ibd


4.直接从数据字典表中去查询分区数据,发现数据已经直接自动同步到分区表中,并且从文件大小看,数据确实已经同步过去了。

 select partition_name,table_rows
from information_schema.partitions
where table_name = 'test01'; 

+----------------+------------+
| partition_name | table_rows |
+----------------+------------+
| p20171205      |      10031 |
| p20171204      |          0 |
| p20171206      |          0 |
| p20171207      |          0 |
+----------------+------------+


5. 而且mysql还提供了rebuild语法,使用方法如下:

alter table tets01 rebuild p20171204,p20171205,p20171206,p20171207.



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值