我试图在大型MySQL表(每个表50-100GB)上创建索引。
我注意到,在启动ALTER语句以创建新索引时,MySQL为该表创建几个临时文件,将整个表数据(.MYD文件)和索引(.MYI文件)复制到新文件中,可能相应地修改它们,最后将它们与原始文件交换。这个过程需要花费大量的时间,因为它需要将大量数据复制到这些临时文件中。
假设我不关心锁定表/停机/任何其他与生产有关的限制,那么有更快的方法吗?有没有办法告诉MySQL,不要创建那些大型临时文件,而是尽快创建索引?
发布于 2018-04-01 16:56:25
.MYD和.MYI文件是MyISAM数据文件。如果可以避免使用MyISAM存储引擎,则不应该使用它。对于大多数查询,它比InnoDB慢,而且MyISAM有design defects with respect to data integrity and atomicity。MyISAM没有得到改进,而是被逐步淘汰了。
如果您使用InnoDB,则可以利用联机DDL的改进。
CREATE INDEX MyIndex ON MyTable (column1) ALGORITHM=INPLACE;请参阅https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl.html
MyISAM不支持联机DDL。
https://stackoverflow.com/questions/49598010
复制相似问题