将mysql非分区表转换为分区表(转)
查看表的分布状况
mysql> select count(*) from justin;
+----------+
| count(*) |
+----------+
| 5845246 |
+----------+
1 row in set (0.00 sec)
mysql> select month(create_time),count(*) from justin group by month(create_time);
+-----------------------+----------+
| month(create_time) | count(*) |
+-----------------------+----------+
| 1 | 1128520 |
| 11 | 1574965 |
| 12 | 3141750 |
+-----------------------+----------+
3 rows in set (6.93 sec)
考虑以create_time为分区键建立分区表
第一步 创建中间表,以主键id和分区列为联合主键
CREATE TABLE `temp_justin` (
`id` bigint(1) NOT NULL AUTO_INCREMENT COMMENT '流水号,自增',
`create_time` datetime DEFAULT NULL COMMENT '订单日志创建时间(建立索引)',
PRIMARY KEY (`id`,`create_time`),
) ENGINE=MyISAM AUTO_INCREMENT=6000000 DEFAULT CHARSET=utf8;
表已经存在580多万记录并且不断在增长,因此中间表初始的id值设置成6000000
增加分区,以月为单位
alter table temp_justin partition by range(to_days(create_time))
(
partition p1012 values less than (to_days('2011-01-01')),
partition p1101 values less than (to_days('2011-02-01')),
partition p1102 values less than (to_days('2011-03-01')),
partition p1103 values less than (to_days('2011-04-01')),
partition p1104 values less than (to_days('2011-05-01')),
partition p1105 values less than (to_days('2011-06-01')),
partition p1106 values less than (to_days('2011-07-01')),
partition p1107 values less than (to_days('2011-08-01')),
partition p1108 values less than (to_days('2011-09-01')),
partition p1109 values less than (to_days('2011-10-01')),
partition p11010 values less than (to_days('2011-11-01')),
partition p11011 values less than (to_days('2011-12-01')),
partition p11012 values less than (to_days('2012-01-01'))
);
第二步 重命名表
Alter table justin rename to justin_bak_110113;
Alter table temp_justin rename to justin;
第三步 同步数据
Insert into justin select * from temp_justin;
表里已经存在将近600万条记录,如此批量导入数据会对数据库性能影响很大。
每一万条提交一次,sleep 2s ,53万数据总耗时2 min 39.67 sec。
mysql> create procedure cp_data()
-> begin
-> declare i int;
-> set i=0;
-> while i<60 do
-> insert into justin
-> select * from justin_bak_110113
-> where id >= i*10000 and id <(i+1)*10000;
-> set i=i+1;
-> select sleep(2);
-> end while;
-> end||
Query OK, 0 rows affected (0.04 sec)
mysql>
mysql> delete from justin;
-> ||
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> call cp_data();
+----------+
| sleep(2) |
+----------+
| 0 |
+----------+
1 row in set (2 min 39.67 sec)
Query OK, 0 rows affected (2 min 39.67 sec)
mysql> select count(*) from justin;
+----------+
| count(*) |
+----------+
| 525031 |
+----------+
1 row in set (0.00 sec)
查看执行计划,使用了分区扫描
mysql> explain
-> select count(*) from justin where create_time
-> <='2011-01-13' and create_time>'2011-01-04';
+----+-------------+--------------------+-------+---------------+---------+---------+------+--------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------------+-------+---------------+---------+---------+------+--------+--------------------------+
| 1 | SIMPLE | justin | index | NULL | PRIMARY | 16 | NULL | 525031 | Using where; Using index |
+----+-------------+--------------------+-------+---------------+---------+---------+------+--------+--------------------------+
1 row in set (0.00 sec)
mysql> explain
-> partitions
-> select count(*) from justin where create_time
-> <='2011-01-13' and create_time>'2011-01-04';
+----+-------------+--------------------+-------------+-------+---------------+---------+---------+------+--------+--------------------------+
|
id | select_type | table | partitions | type |
possible_keys | key | key_len | ref | rows |
Extra |
+----+-------------+--------------------+-------------+-------+---------------+---------+---------+------+--------+--------------------------+
|
1 | SIMPLE | justin | p1012,p1101 | index | NULL |
PRIMARY | 16 | NULL | 525031 | Using where; Using index |
+----+-------------+--------------------+-------------+-------+---------------+---------+---------+------+--------+--------------------------+
1 row in set (0.00 sec)
将mysql非分区表转换为分区表(转)的更多相关文章
- oracle 11g 将非分区表转换为分区表在线重定义
--操作的用户需要有以下的权限 GRANT CONNECT, RESOURCE TO CMIGDW; GRANT EXECUTE ON DBMS_REDEFINITION TO CMIGDW; GRA ...
- Oracle 12C 新特性之非分区表转分区表online clause(不停业务+索引有效)
12c以前非分区表需要转换为分区, 如果不停业务的话可以使用在线重定义,只有在表进行切换的时候会有短暂的锁表. 12c 中alter table online clause 实现了表上现有的索引有效, ...
- mysql分表与分区表
mysql分表与分区表 转自:http://blog.51yip.com/mysql/949.html 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具 ...
- 高性能mysql 第7章 mysql高级特性之分区表
分区表: 分区表是一个独立的逻辑表,底层通过多个物理表实现. mysql实现分区表的方式是对底层表的封装.这意味着没有全局索引,索引是建立在底层的每个表上的(跟ORACLE不一样). 用到分区表的几种 ...
- 玩转SQL Server复制回路の变更数据类型、未分区表转为分区表
玩转SQL Server复制回路の变更数据类型.未分区表转为分区表 复制的应用: 初级应用:读写分离.数据库备份 高级应用:搬迁大型数据库(跨机房).变更数据类型.未分区表转为分区表 京东的复制专家 ...
- Hive入门--2.分区表 外部分区表 关联查询
1.查看mysql中metastore数据存储结构 Metastore中只保存了表的描述信息(名字,列,类型,对应目录) 使用SQLYog连接itcast05 的mysql数据库 查看hive数据库 ...
- mysql 非安装版的配置
一直以来都是使用wamp中集成的mysql数据库,今天突然想试试下载一个mysql的zip包进行配置. 一.下载mysql非安装版 下载地址可以到:http://dev.mysql.com/downl ...
- MySQL 排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题
排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题 By:授客 QQ:1033553122 测试环境 win10 MySQL 5.7 问题描述: 执行类似以下mysql查询, SEL ...
- Windows下安装mysql(非安装包)
Windows下安装mysql(非安装包) 参考:https://www.cnblogs.com/yunlongaimeng/p/12558638.html 1.下载MYSQL(慢的话可以用迅雷,或其 ...
随机推荐
- Java 正则表达式提取标签中的属性(src 连接地址)等
public class Test { public static void main(String[] args) { String source = "<p><img ...
- java编程思想---对象
一.对象 对于每种语言来说,都有自己操纵内存中元素的方法. 在java中,一切被视为对象.可是操纵对象的是一个"引用".举个样例,能够比作为遥控器对电视的操作,遥控器就是引用,而电 ...
- 一、NoSQL入门概述
- 【Nodejs】nimble或async并不能保证程序串行执行,回调是回避不了的坑
先看一段例程: //------------------------------- // 用于创建目录 //------------------------------- function creat ...
- centos+apache+mod_ssl
参考网站:配置Apache建立openssl证书实现SSL访问:http://blog.51yip.com/apachenginx/958.html用ca工具生成证书的方法:http://hi.bai ...
- VM虚拟机Failed to initialize remote display subsystem怎么办
1 如图所示,启动虚拟机的时候出现提示Failed to initialize remote display subsystem.怎么办 2 进入DOS窗口,输入net user __vmware_u ...
- 漫谈单点登录(SSO)(淘宝天猫)(转载)
1. 摘要 ( 注意:请仔细看下摘要,留心此文是否是您的菜,若浪费宝贵时间,深感歉意!!!) SSO这一概念由来已久,网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂,各式各样应有尽有!开 ...
- uni-app 如何开启sass\less处理
开启方式:工具->插件安装->安装完成,启用即可
- win7 mtp
Sensors MTP Monitor Service 允许MTP设备数据传输,如果该服务被禁用,MTP监视器将不能工作.该服务的默认运行方式是手动,如果你没有使用MTP设备,该功能就可以放心禁用. ...
- 1、配置JAVA的环境变量
想要成功配置Java的环境变量,那肯定就要安装JDK,才能开始配置的. 想要成功配置Java的环境变量,那肯定就要安装JDK,才能开始配置的. 安装JDK 向导进行相关参数设置.如图: 正在安装程 ...