create table xx(
  id varchar(20)
);alter table xx change id idd varchar(30);如果id字段有个几百万的数据量,这个换名将扫描全表.性能急速下降.请问:有什么别的方法更换表名(字段的类型也要是改的)不用扫描全表的?

解决方案 »

  1.   

     INNODB AND MYISAM 2个都说一下吧~~
      

  2.   

    MYISAM 的话有一种方法,但并不是MYSQL官方承诺的方法,后果自负。创建另一个数据库 create database test2,使用与当前数据库的参数相同。
    然后创建同样的表,你可以直接show create table得到当前表
    在test2中创建这个表,然后alter table xx change id idd varchar(30);,下一步,直接把test2下的 xx.frm 复制到 当前数据库目录中。
    以上步骤非官方方法,并且一般对仅修改字段名有效,如改变了字段类型则不行。 varchar(20 到 varchar(30) 应该还可以,你可以自己试一下。提醒! 做好备份!
      

  3.   

      不copy物理文件的方法有吗?··
      

  4.   

    create table xx1(
      idd varchar(30)
    );insert into xx1 select * from xx;
      

  5.   

    方法肯定有,只不过是代价是多少而已。方法一、直接花时间研究 *.FRM文件的格式,然后直接改这个文件
    方法二、研究MYSQL的源代码,直接修改其原代码,
      

  6.   


     这样说吧,我移动物理表结构,不新建表,一句话sql完成... 楼上2位大哥的方法,在我工作的需求中是不可取的..~~  
      

  7.   

     这样说吧,不移动物理表结构,不新建表,一句话sql完成... 楼上2位大哥的方法,在我工作的需求中是不可取的..~~