求一种快速的方法......

沉沦 2010-07-26 07:05:48
有一个表.

create tabel xx(
id1 varchar(20) not null,
id2 varchar(20) not null,
id3 varchar(20) not null,
id4 varchar(20) not null,
id5 varchar(20) not null,
id6 varchar(20) not null,
id7 varchar(20) not null,
id8 varchar(20) not null,
id9 varchar(20) not null,
id10 varchar(20) not null
)engine=innodb;


这张表的数据量为1000W++ 行~

1.我想改一下表的字段名.
2.还要增加一个字段.
3.增加一个联合主键.



要求:速度要求尽最可能的快....快....快...



PS:
1.请 不要告诉换个16核的CPU跑.... 谢谢
2.请 不要告诉我去覆盖.frm文件 ...谢谢


最终表结构为:


create tabel xx(
i1 varchar(20) not null,
i2 varchar(20) not null,
i3 varchar(20) not null,
i4 varchar(20) not null,
i5 varchar(20) not null,
i6 varchar(20) not null,
i7 varchar(20) not null,
i8 varchar(20) not null,
i9 varchar(20) not null,
i10 varchar(20) not null,
i11 varcahr(20) not null,
primary key (i1,i2,i3,i4,i5,i6)
)engine=innodb;


...全文
135 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine333 2010-07-27
  • 打赏
  • 举报
回复
先自己做做实验吧,看是在原表基础上操作快,还是导入新表,删旧表快——倾向自己建新表,不过估计都不快。

另外,没看懂PK,为什么那么多字段。请lz分清PK和Unique Key的区别
wwwwb 2010-07-27
  • 打赏
  • 举报
回复
试试:
create table newtt select i1,...i10, REPEAT(' ',20) as i11 from tt
再建立索引
create index newtt on tt(i1..i11)

估计速度也快不到多少
ACMAIN_CHM 2010-07-27
  • 打赏
  • 举报
回复
速度一样。

ALTER TABLE 本身MYSQL在后台做的就是

1. 新建一临时表
2. 复制数据到临时表
3. 删除原表
4. 更名临时表为原表名。

时间主要的消耗在 "复制数据到临时表" 其它步骤的时间可以忽略不计。

复制数据到临时表 这一步,影响时间的因素有,索引维护,数据插入,锁
沉沦 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acmain_chm 的回复:]
引用
PS:
1.请 不要告诉换个16核的CPU跑.... 谢谢
2.请 不要告诉我去覆盖.frm文件 ...谢谢加上这些限制,也就没什么办法了。

最快的方法也就只有把索引都先去掉,然后alter table ,这一步需要长时间,然后再create index
[/Quote]

如果我去创建一个临时表,会比你这个方法快吗?

1.先关掉索引..
2.insert into test1 (select ....);
3.在开索引...

请问ACMAIN_CHM 大哥,哪种方法比较快。
widewave 2010-07-27
  • 打赏
  • 举报
回复
1000W条记录,应该不会太慢。
ACMAIN_CHM 2010-07-26
  • 打赏
  • 举报
回复
[Quote]
PS:
1.请 不要告诉换个16核的CPU跑.... 谢谢
2.请 不要告诉我去覆盖.frm文件 ...谢谢[/Quote]加上这些限制,也就没什么办法了。

最快的方法也就只有把索引都先去掉,然后alter table ,这一步需要长时间,然后再create index

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧