有一个表.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;

解决方案 »

  1.   

    加上这些限制,也就没什么办法了。最快的方法也就只有把索引都先去掉,然后alter table ,这一步需要长时间,然后再create index
      

  2.   


    如果我去创建一个临时表,会比你这个方法快吗? 1.先关掉索引..
     2.insert into test1 (select ....);
     3.在开索引...请问ACMAIN_CHM 大哥,哪种方法比较快。
     
      

  3.   

    速度一样。ALTER TABLE 本身MYSQL在后台做的就是1. 新建一临时表
    2. 复制数据到临时表
    3. 删除原表
    4. 更名临时表为原表名。时间主要的消耗在 "复制数据到临时表" 其它步骤的时间可以忽略不计。复制数据到临时表 这一步,影响时间的因素有,索引维护,数据插入,锁
      

  4.   

    试试:
    create table newtt select i1,...i10, REPEAT(' ',20) as i11 from tt
    再建立索引
    create index newtt on tt(i1..i11)估计速度也快不到多少
      

  5.   

    先自己做做实验吧,看是在原表基础上操作快,还是导入新表,删旧表快——倾向自己建新表,不过估计都不快。另外,没看懂PK,为什么那么多字段。请lz分清PK和Unique Key的区别