[英]Creating indexes prior to LOAD DATA for performance in MySQL
适用于MySQL的Amazon RDS客户数据导入指南 (于2009年编写)提供了以下技巧,以减少MySQL的加载时间-
在加载之前创建所有二级索引。 对于那些熟悉其他数据库的人来说,这是违反直觉的。 添加或修改二级索引会导致MySQL创建一个新表,并更改索引,将数据从现有表复制到新表,然后删除原始表。
但是,有几篇来自2010+的文章和stackoverflow帖子提供了性能测试,这些测试表明加载后创建索引的性能更高。 这是从哪里来的,它仅适用于旧版本的MySQL吗? 如果是这样,请提供确切的详细信息。 还是在特定情况下仍然适用?
AWS建议在加载应用于旧版MySQL(<5.5)的数据之前先放置二级索引,因为二级索引的处理方式:
传统上,创建和删除二级索引会涉及复制InnoDB表中的所有数据的大量开销。 InnoDB插件的快速索引创建功能使InnoDB二级索引的CREATE INDEX和DROP INDEX语句都快得多。
MySQL在5.5文档中提供了以下建议:
因为索引维护可能会增加许多数据传输操作的性能开销,所以请考虑执行诸如ALTER TABLE ... ENGINE = INNODB或INSERT INTO ... SELECT * FROM ...之类的操作,而无需任何二级索引,然后再创建索引。
如果您将MySQL 5.5或更高版本与AWS结合使用,则可以利用快速的快速索引创建功能来显着加快二级索引的创建速度。
快速索引创建是InnoDB插件(现在是5.5及更高版本中的MySQL服务器的一部分)首次引入的功能,它通过避免完全重写关联表的方式来加快InnoDB二级索引的创建。 加速也适用于删除二级索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.