mysql++快速复制大表_MySql数据库表快速复制
表索引操作
这里之所以写索引的操作主要原因在于:在导入数据前删除索引能大大提升导入速度。
DDL语句获取现有索引1show create table t_question_bak;
获取所有索引
获取单一索引1
2
3
4
5
6SELECT TABLE_SCHEMA,TABLE_NAME,INDEX_NAME,COLUMN_NAME,SEQ_IN_INDEX,NON_UNIQUE,INDEX_TYPE
FROM INFORMATION_SCHEMA.STATISTICS i
WHERE TABLE_SCHEMA = 'xhkj_ques_0923'
AND TABLE_NAME='t_question_bak'
AND i.INDEX_NAME <> 'PRIMARY'
AND i.SEQ_IN_INDEX=1;
或者1show index from t_question_bak;
创建表索引
基本语法
在已有的表中建立索引的语法:1ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY [索引名](字段名1 [(长度)] [ASC|DESC]) [USING 索引方法];
或者1CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 ON 表名(字段名) [USING 索引方法];
例子:1ALTER TABLE projectfile ADD UNIQUE INDEX (fileuploadercode);
或者1create index index_id on sorc4(s_id);
获取建表普通索引SQL1
2
3
4
5
6
7SELECT CONCAT('ALTER TABLE ',i.TABLE_NAME,' ADD INDEX ',i.INDEX_NAME,'(',i.COLUMN_NAME,');')
FROM INFORMATION_SCHEMA.STATISTICS i
WHERE TABLE_SCHEMA = 'xhkj_ques_0923'
AND TABLE_NAME='t_question_bak'
AND i.INDEX_NAME <> 'PRIMARY'
AND i.SEQ_IN_INDEX=1
AND i.NON_UNIQUE=1;
或者1
2
3
4
5
6
7SELECT CONCAT('CREATE INDEX ',i.INDEX_NAME,' ON ',i.TABLE_NAME,'(',i.COLUMN_NAME,');')
FROM INFORMATION_SCHEMA.STATISTICS i
WHERE TABLE_SCHEMA = 'xhkj_ques_0923'
AND TABLE_NAME='t_question_bak'
AND i.INDEX_NAME <> 'PRIMARY'
AND i.SEQ_IN_INDEX=1
AND i.NON_UNIQUE=1;
获取表全文索引SQL1
2
3
4
5
6
7SELECT CONCAT('ALTER TABLE ',i.TABLE_NAME,' ADD FULLTEXT INDEX ',i.INDEX_NAME,'(',i.COLUMN_NAME,');')
FROM INFORMATION_SCHEMA.STATISTICS i
WHERE TABLE_SCHEMA = 'xhkj_ques_0923'
AND TABLE_NAME='t_question_bak'
AND i.INDEX_NAME <> 'PRIMARY'
AND i.SEQ_IN_INDEX=1
AND i.INDEX_TYPE='FULLTEXT';
或者1
2
3
4
5
6
7SELECT CONCAT('CREATE FULLTEXT INDEX ',i.INDEX_NAME,' ON ',i.TABLE_NAME,'(',i.COLUMN_NAME,');')
FROM INFORMATION_SCHEMA.STATISTICS i
WHERE TABLE_SCHEMA = 'xhkj_ques_0923'
AND TABLE_NAME='t_question_bak'
AND i.INDEX_NAME <> 'PRIMARY'
AND i.SEQ_IN_INDEX=1
AND i.INDEX_TYPE='FULLTEXT';
获取建表唯一索引SQL1
2
3
4
5
6
7SELECT CONCAT('ALTER TABLE ',i.TABLE_NAME,' ADD UNIQUE INDEX ',i.INDEX_NAME,'(',i.COLUMN_NAME,');')
FROM INFORMATION_SCHEMA.STATISTICS i
WHERE TABLE_SCHEMA = 'xhkj_ques_0923'
AND TABLE_NAME='t_question_bak'
AND i.INDEX_NAME <> 'PRIMARY'
AND i.SEQ_IN_INDEX=1
AND i.NON_UNIQUE=0;
或者1
2
3
4
5
6
7SELECT CONCAT('CREATE UNIQUE INDEX ',i.INDEX_NAME,' ON ',i.TABLE_NAME,'(',i.COLUMN_NAME,');')
FROM INFORMATION_SCHEMA.STATISTICS i
WHERE TABLE_SCHEMA = 'xhkj_ques_0923'
AND TABLE_NAME='t_question_bak'
AND i.INDEX_NAME <> 'PRIMARY'
AND i.SEQ_IN_INDEX=1
AND i.NON_UNIQUE=0;
删除表索引
导入数据前删除表索引能大大提升数据的导入效率1ALTER TABLE 表名 DROP INDEX 索引名;
或1DROP INDEX 索引名 ON 表名;
生成删除索引的SQL(排除主键索引)1
2
3
4
5SELECT CONCAT('ALTER TABLE ',i.TABLE_NAME,' DROP INDEX ',i.INDEX_NAME,';')
FROM INFORMATION_SCHEMA.STATISTICS i
WHERE TABLE_SCHEMA = 'xhkj_ques_0923'
AND TABLE_NAME='t_question_bak'
AND i.INDEX_NAME <> 'PRIMARY';
复制运行即可
一、最简单的方法1create table t2 as select * from t1;适用表数据量小的情况
二、SQL形式
mysqldump逻辑导出1mysqldump -h127.0.0.1 -P3306 -uroot -p123456–add-locks=0
表示在输出的的文件结果里,不增加”lock tbales t2 write”
–no-create-info
不需要导出表结构
–single-transaction
不需要对t2进行加锁,而是使用start transaction with consistent snapshop的方法
-set-gtid-purged=off
不导出gtid相关信息
–where=’c1>4’
过滤条件
–result-file
指定导出文件的路径
三、CSV文件形式
创建t3表结构1create table t3 like t2;
导出需要导出t2的数据1
2
3
4
5# 全部导出
SELECT * FROM t2 INTO OUTFILE '/var/lib/mysql-files/t2.csv' FIELDS TERMINATED BY ',';
# 部分导出
SELECT * FROM t2 WHERE c1>4 INTO OUTFILE '/var/lib/mysql-files/t2.csv' FIELDS TERMINATED BY ',';
将csv文件导入到t31LOAD DATA INFILE '/var/lib/mysql-files/t2.csv' INTO TABLE t3 FIELDS TERMINATED BY ',';
四、物理拷贝的方法
1、创建t3表结构1create table t3 like t2;
2、执行1alter table t3 discard tablespace;
此时t3.ibd会被删除
3、执行1flush table t2 for export;
此时test01目录下会生成一个t2.cfg文件
4、拷贝t2.ibd,t2.cfg,注意权限1
2cp t2.cfg t3.cfg
cp t2.ibd t3.ibd
5、解除表锁定1unlock tables;
这时候t2.cfg会被删除
6、执行1alter table t3 import tablespace;
将t3.ibd作为t3新的表空间,数据和t2也是相同的。
总结对于大表,物理拷贝方法最快,对于误删表的情况,比较有用,但是也存在一定的弊端:必须是全表拷贝;
必须能连服务器;
源表和目标表都必须是innodb存储引擎。
mysqldump方法可以生成insert的语句,可以加过滤条件拷贝部分数据,但是不能使用join这种比较复杂的条件。
select .... into outfile的方法最灵活,但是缺点是每次只能导出一张表。
mysql++快速复制大表_MySql数据库表快速复制相关推荐
- mysql是自动表锁定吗_MySQL数据库表怎么锁定
如果你同时运行表的检查/修复程序时,你或许不想让MySQL服务器和实用程序同时访问一个表.如果两个程序都向表中写数据显然会造成很大的麻烦,甚至会有意外情况发生.如果表正由一个程序写入,同时进行读取的另 ...
- mysql的关系表_mysql 数据库表间关系图怎么查看?
展开全部 mysql数据库表间的关系图可以通过navicat查看: 第一步:下载navicat打开: 第二步:点击navicat界面最右下角标注的按钮即可62616964757a686964616fe ...
- mysql怎么删除表中字段的数据库表_Mysql 数据库 表 字段的创建 修改 删除
MYSQL基础上机练习题(一) 数据库.表.字段的创建.修改.删除 一.实验目的: 创建.修改.删除数据库 创建.修改.删除表 创建.修改.删除字段 二.内容: 创建一个用于企业管理的员工管理数据库, ...
- mysql前两个月_MySQL数据库表始终保持最近两个月的记录
实现自动备份的方法很多,这里说的是客户需要始终保持某个表中存储两个月的记录,以便保持性能.过期数据我们建议存储到另外一个表中,以备以后查询使用. 我们采用存储过程+linux Crontab的方式实现 ...
- mysql数据库操作宠物表_mysql数据库及表的基本操作
1. 数据库操作 1.1 创建数据库 # 创建数据库 mysql> create database db_test; # 查看创建好的数据库 mysql> show create data ...
- mysql黑窗口常用命令_mysql数据库常用命令
1.MySQL常用命令 create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删除数据库,不提醒 show ...
- linux mysql 实战_Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06
Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06 视频教程学习地址 Oracle/MySQL数据库学习专用QQ群:336282998.189070296 学完风哥本课程能熟悉 ...
- mysql周德伟课后答案_mysql数据库搜索
MySQL 数据库考试试题 及答案精编 Document number:WTT-LKK-GBB-08921-EIGG-22986 专业:移动通信 科目:MySQL 数据库 一.单项选择题 1.以下聚合 ...
- 【超详细Django网站开发过程2】便利店管理系统之——创建数据库→定义数据库表→创建数据库表
假装自己拥有一家小便利店,名叫--7-Twelve,我希望制作一个便利店管理系统对我的顾客.销售人员.货物等数据进行管理,先不管前端,后端总免不了对数据的一顿操作,那如何在Django中对数据库进行增 ...
最新文章
- 如何测量情感和感觉(以及它们之间的区别)?
- 基于BP弱分类器用Adaboost的强分类器
- Acwing第 10 场周赛【未完结】
- x shell 配置 和相关注意点(vm相关注意点)
- PostMessage与SendMessage
- 计蒜客 - Distance on the tree(LCA+主席树)
- 编写一个C程序,实现以下功能:用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:int strcmp(char *p1,char *p2);设p1指向字符串s
- axure9数据统计插件_WMDA:大数据技术栈的综合实践
- python 装饰器 继承_Python设计模式之装饰器模式
- Struts2执行流程
- iOS中的三大定时器
- html实体编码_为什么涨薪的永远不是你?你的编码姿势对了吗?
- 数学建模之初等模型详解
- java二叉树删除节点
- 网易AI平台开放多项技术,助力网易七鱼智能客服升级
- excel查重模型,老板不要再烦我
- Unity中角色基本属性与数值的管理
- 取得高等学校教师资格证应当具备什么学历要求
- 利用opencv带你玩转人脸识别-中篇(人脸检测,检测多个,视频检测快速入门)
- AVR USART接收中断程序