我有一个2G多的表,里面有5,984,902条记录,我想新增一个字段,可是很慢,执行不了.请问怎么办?

解决方案 »

  1.   

    mysql 中修改表,等同,新建一个表,然后所数据复制过去,所以速度上很慢。你的执行不了的错误信息是什么? 是不是超时了?或者其它进程锁定?或者你的磁盘空间不足?或者
      

  2.   

    ACMAIN_CHM:磁盘空间是够的,就是很慢,几十分钟都执行不完,而且CPU和内存占用都很高,按照你的意思,就是说新增加一个字段,就相当于要重新建这个表,再复制数据,为什么会这样呢,这样速度肯定慢,有没有其它的办法呢?
      

  3.   

    CPU和内存占用都很高
    ---------
    那是肯定的啦
    中间io量那么大
      

  4.   

    没有其它办法,这个是MySQL的机制。对于表的大部分修改,它都会
    1。另建一新表
    2。复制数据
    3。删除原表
    4。更名新表为原表。
      

  5.   

    楼主
    你增加字段肯定有默认值或者限制。增加字段时候,先不要增加默认值或者相关限制,之后统一update 默认值或者增加相关限制。
      

  6.   

    下面是MySQL官方文档中的解释。
    =============================ALTER TABLE运行时会对原表进行临时复制,在副本上进行更改,然后删除原表,再对新表进行重命名。在执行ALTER TABLE时,其它用户可以阅读原表,但是对表的更新和修改的操作将被延迟,直到新表生成为止。新表生成后,这些更新和修改信息会自动转移到新表上。注意,如果您在执行ALTER TABLE时使用除了RENAME以外的选项,则MySQL会创建一个临时表。即使数据并不需要进行复制(例如当您更改列的名称时),MySQL也会这么操作。对于MyISAM表,您可以通过把myisam_sort_buffer_size系统变量设置到一个较高的值,来加快重新创建索引(该操作是变更过程中速度最慢的一部分)的速度。