mysql的机制和oracle不一样,mysql 大部分ddl操作类似如下:

ALTER TABLE运行时会对原表进行临时复制,在副本上进行更改,然后删除原表,再对新表进行重命名。在执行ALTER TABLE时,其它用户可以阅读原表,但是对表的更新和修改的操作将被延迟,直到新表生成为止。新表生成后,这些更新和修改信息会自动转移到新表上。

注意,如果您在执行ALTER TABLE时使用除了RENAME以外的选项,则MySQL会创建一个临时表。即使数据并不需要进行复制(例如当您更改列的名称时),MySQL也会这么操作。对于MyISAM表,您可以通过把myisam_sort_buffer_size系统变量设置到一个较高的值,来加快重新创建索引(该操作是变更过程中速度最慢的一部分)的速度。

 

http://www.itpub.net/forum.php?mod=viewthread&action=printable&tid=1171134

 

-------------------------------------------------------

所以在创建索引时,会产生以‘#sql’ 开头的文件,这文件占的空间跟原来的表差不多,所以在有数据的表建索引,需要考虑空间是否足够大

 

如果其中发现空间不够,可以把‘#sql’开头的文件删掉,删掉后还需要把之前创建索引的进程杀掉,否则,硬盘空间还是处于占用状态