在MySQL中创建索引而不在磁盘上创建临时文件

时间:2018-04-01 12:23:15

标签: mysql performance sqlperformance database-indexes

我正在尝试在大型MySQL表上创建索引(每个表50-100GB)。

我注意到当启动ALTER语句来创建新索引时,MySQL会为该表创建几个临时文件,复制整个表数据( .MYD文件)和索引( .MYI文件)对新文件,可能相应地修改它们,最后用原始文件交换它们。这个过程需要花费很多时间,因为它需要将大量数据复制到那些临时文件中。

假设我不关心锁定表/停机时间/任何其他与生产相关的限制,是否有更快的方法?有没有办法告诉MySQL,不要创建那些大的临时文件,而只是尽可能快地创建索引?

1 个答案:

答案 0 :(得分:0)

.MYD和.MYI文件是MyISAM数据文件。如果可以避免,则不应使用MyISAM存储引擎。对于大多数查询,它比InnoDB慢,MyISAM有design defects with respect to data integrity and atomicity。 MyISAM没有得到改进,它正在逐步淘汰。

如果您使用InnoDB,则可以利用在线DDL改进。

.Select(x => new LocationDistrict
    { ...

请参阅https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl.html

MyISAM不支持在线DDL。