mysql大数据量下如何快速修改表结构?

时间:2021-06-11 14:33:01
一个表里有1千万的数据,想在一个字段上加一个唯一结束,直接alter table会特别特别慢的,有没有什么别的办法?或者谁有过类似的经验,分享一下!非常感谢!

14 个解决方案

#1


创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

#2


mysql大数据量下如何快速修改表结构?不知道,帮顶!  

#3


引用 1 楼 acmain_chm 的回复:
创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

我感觉1千万的数据,把旧表的数据全部插入到新表得需要很长很长时间吧?

#4


引用 3 楼 zhxilo 的回复:
引用 1 楼 acmain_chm 的回复:

创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

我感觉1千万的数据,把旧表的数据全部插入到新表得需要很长很长时间吧?


几ms的事情!

#5


引用 3 楼 zhxilo 的回复:
引用 1 楼 acmain_chm 的回复:

创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

我感觉1千万的数据,把旧表的数据全部插入到新表得需要很长很长时间吧?

比你直接建索引应该要快,因为索引建立的时候要在1千万数据上全部维护一遍...

你插入1千W数据到另外一个的表时候 可以使用一些加速的手段

#6


引用 4 楼 hb1122 的回复:
引用 3 楼 zhxilo 的回复:
引用 1 楼 acmain_chm 的回复:

创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

我感觉1千万的数据,把旧表的数据全部插入到新表得需要很长很长时间吧?


几ms的事情!

我用20w数据测试了一下,用了32ms,估计1千万怎么也得半个小时吧。
影响的数据栏: 203495
时间: 32.391ms

#7


引用 1 楼 acmain_chm 的回复:
创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

++重建一个好了

#8


引用 3 楼 zhxilo 的回复:
引用 1 楼 acmain_chm 的回复:

创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

我感觉1千万的数据,把旧表的数据全部插入到新表得需要很长很长时间吧?


很快的。

#9


引用 6 楼 zhxilo 的回复:
引用 4 楼 hb1122 的回复:

引用 3 楼 zhxilo 的回复:
引用 1 楼 acmain_chm 的回复:

创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

我感觉1千万的数据,把旧表的数据全部插入到新表得需要很长很长时间吧?


几ms的事情!

我……


你啥服务器啊,我的pc机器,4G内存,4核的,2000数据,62秒搞定了。

#10


引用 9 楼 mysqldbd 的回复:
2000数据,62秒搞定了

mysql大数据量下如何快速修改表结构?照你这么说也太慢了,1千万的数据要跑到何年何月?

#11


引用 9 楼 mysqldbd 的回复:
引用 6 楼 zhxilo 的回复:
引用 4 楼 hb1122 的回复:

引用 3 楼 zhxilo 的回复:
引用 1 楼 acmain_chm 的回复:

创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

我感觉1千万的数据,把旧表的数据全部插入到新表得需要很长很长时间……

.
2000数据,62秒搞定,大哥你开玩笑吧

#12


导出数据,然后把表删除,再创建新表,导入数据。

#13


表里暂时有1百多万数据,我直接执行的alter table tablename add unique(f_uid);
影响的数据栏: 1265737
时间: 374.203ms
1楼的说法也许也可行,但我没有进行测试。
感谢大家的帮助!

#14


引用 10 楼 zhxilo 的回复:
引用 9 楼 mysqldbd 的回复:
2000数据,62秒搞定了

照你这么说也太慢了,1千万的数据要跑到何年何月?


2000W, 不好意思,少打了一个字。

#1


创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

#2


mysql大数据量下如何快速修改表结构?不知道,帮顶!  

#3


引用 1 楼 acmain_chm 的回复:
创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

我感觉1千万的数据,把旧表的数据全部插入到新表得需要很长很长时间吧?

#4


引用 3 楼 zhxilo 的回复:
引用 1 楼 acmain_chm 的回复:

创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

我感觉1千万的数据,把旧表的数据全部插入到新表得需要很长很长时间吧?


几ms的事情!

#5


引用 3 楼 zhxilo 的回复:
引用 1 楼 acmain_chm 的回复:

创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

我感觉1千万的数据,把旧表的数据全部插入到新表得需要很长很长时间吧?

比你直接建索引应该要快,因为索引建立的时候要在1千万数据上全部维护一遍...

你插入1千W数据到另外一个的表时候 可以使用一些加速的手段

#6


引用 4 楼 hb1122 的回复:
引用 3 楼 zhxilo 的回复:
引用 1 楼 acmain_chm 的回复:

创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

我感觉1千万的数据,把旧表的数据全部插入到新表得需要很长很长时间吧?


几ms的事情!

我用20w数据测试了一下,用了32ms,估计1千万怎么也得半个小时吧。
影响的数据栏: 203495
时间: 32.391ms

#7


引用 1 楼 acmain_chm 的回复:
创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

++重建一个好了

#8


引用 3 楼 zhxilo 的回复:
引用 1 楼 acmain_chm 的回复:

创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

我感觉1千万的数据,把旧表的数据全部插入到新表得需要很长很长时间吧?


很快的。

#9


引用 6 楼 zhxilo 的回复:
引用 4 楼 hb1122 的回复:

引用 3 楼 zhxilo 的回复:
引用 1 楼 acmain_chm 的回复:

创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

我感觉1千万的数据,把旧表的数据全部插入到新表得需要很长很长时间吧?


几ms的事情!

我……


你啥服务器啊,我的pc机器,4G内存,4核的,2000数据,62秒搞定了。

#10


引用 9 楼 mysqldbd 的回复:
2000数据,62秒搞定了

mysql大数据量下如何快速修改表结构?照你这么说也太慢了,1千万的数据要跑到何年何月?

#11


引用 9 楼 mysqldbd 的回复:
引用 6 楼 zhxilo 的回复:
引用 4 楼 hb1122 的回复:

引用 3 楼 zhxilo 的回复:
引用 1 楼 acmain_chm 的回复:

创建一个新表,然后再把旧表中数据 insert into newTable select * from oldTable, 然后再删除旧表,把新表更名。

我感觉1千万的数据,把旧表的数据全部插入到新表得需要很长很长时间……

.
2000数据,62秒搞定,大哥你开玩笑吧

#12


导出数据,然后把表删除,再创建新表,导入数据。

#13


表里暂时有1百多万数据,我直接执行的alter table tablename add unique(f_uid);
影响的数据栏: 1265737
时间: 374.203ms
1楼的说法也许也可行,但我没有进行测试。
感谢大家的帮助!

#14


引用 10 楼 zhxilo 的回复:
引用 9 楼 mysqldbd 的回复:
2000数据,62秒搞定了

照你这么说也太慢了,1千万的数据要跑到何年何月?


2000W, 不好意思,少打了一个字。