怎么快速复制千万级的Mysql数据库表
悬赏:20 发布时间:2008-07-04 提问人:duprf (初级程序员)
我google了一下大概有一下几个方法,
1.复制表结构及数据到新表
CREATE TABLE 新表 SELECT * FROM 旧表
2.只复制表结构到新表
CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2
即:让WHERE条件不成立.
3.复制旧表的数据到新表(假设两个表结构一样)
INSERT INTO 新表 SELECT * FROM 旧表
4.复制旧表的数据到新表(假设两个表结构不一样)
INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表
对于千万级的MYSQL数据库,以上几个方法的效率都很低,请问大家有更好的方法吗?还请赐教,非常感谢
问题补充:
谢谢一楼的回答,我知道要用存储过程,我想问的是用什么sql语句,效率更高,以上几个sql语句就是用存储过程效率也很低
该问题已经关闭: 谢谢大家的回复,但是问题依旧没有解决,放弃MYSQL数据库了,改用oracle了
1.复制表结构及数据到新表
CREATE TABLE 新表 SELECT * FROM 旧表
2.只复制表结构到新表
CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2
即:让WHERE条件不成立.
3.复制旧表的数据到新表(假设两个表结构一样)
INSERT INTO 新表 SELECT * FROM 旧表
4.复制旧表的数据到新表(假设两个表结构不一样)
INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表
对于千万级的MYSQL数据库,以上几个方法的效率都很低,请问大家有更好的方法吗?还请赐教,非常感谢
问题补充:
谢谢一楼的回答,我知道要用存储过程,我想问的是用什么sql语句,效率更高,以上几个sql语句就是用存储过程效率也很低
该问题已经关闭: 谢谢大家的回复,但是问题依旧没有解决,放弃MYSQL数据库了,改用oracle了
回答
建议用存储过程解决
这样数据不用返回到程序上去
而且效率高
这样数据不用返回到程序上去
而且效率高
aaronqinxin (初级程序员) 2008-07-04
不太清楚你所说的效率是指的什么?我不太懂你所谓千万级是什么意思,如果真是每张表千万条数据,那么一个select * from 这样的语句估计就能把机器搞死。MySQL的单表最大容量4G,针对这种表的复制显然时间性能是次要的,主要的是保证在复制过程中不要死机。所以建议使用分页的方式,先建一个空的目标表,注意不要建索引和主键,,在存储过程中建一个循环,每次导出千分之一(或者某个你觉得合适的值)。最后给目标表建主键和索引。
wangxin0072000 (高级程序员) 2008-07-04
不太清楚你所说的效率是指的什么?我不太懂你所谓千万级是什么意思,如果真是每张表千万条数据,那么一个select * from 这样的语句估计就能把机器搞死。MySQL的单表最大容量4G,针对这种表的复制显然时间性能是次要的,主要的是保证在复制过程中不要死机。所以建议使用分页的方式,先建一个空的目标表,注意不要建索引和主键,,在存储过程中建一个循环,每次导出千分之一(或者某个你觉得合适的值)。最后给目标表建主键和索引。
wangxin0072000 (高级程序员) 2008-07-04
对于mysql最简单的是
0.建立一个空的database,名字就是你的目标database名字
1.停掉mysql
2.直接复制数据库目录到新的目录
mysql是按目录存储的.复制目录就行了.
0.建立一个空的database,名字就是你的目标database名字
1.停掉mysql
2.直接复制数据库目录到新的目录
mysql是按目录存储的.复制目录就行了.
achun (中级程序员) 2008-07-04
1.直接把它生成SQL代码然后再稍微修改一下,个人觉得还蛮快的诶
2. 直接到Mysql的安装目录下面找到data文件夹,然后把数据库拷贝一下,也行
2. 直接到Mysql的安装目录下面找到data文件夹,然后把数据库拷贝一下,也行
yupeng_raul7 (初级程序员) 2008-07-05




