【问题标题】:Creating indexes prior to LOAD DATA for performance in MySQL在 LOAD DATA 之前创建索引以提高 MySQL 的性能
【发布时间】:2013-09-13 23:13:01
【问题描述】:
Amazon RDS Customer Data Import Guide for MySQL(写于 2009 年)提供了以下提示以减少 MySQL 的加载时间 -
在加载之前创建所有二级索引。这对于熟悉其他数据库的人来说是违反直觉的。添加或修改二级索引会导致 MySQL 创建一个索引更改的新表,将数据从现有表复制到新表,并删除原始表。
但是,2010 年以后有几篇文章和 stackoverflow 帖子提供了性能测试,表明在加载后创建索引的性能更高。这是从哪里来的,它只是适用于旧版本的 MySQL 吗?如果是这样,请提供确切的细节。或者,它仍然适用于特定情况吗?
【问题讨论】:
标签:
mysql
sql
amazon-web-services
【解决方案1】:
由于二级索引的处理方式,AWS 建议在加载应用于旧 MySQL 版本 (
来自MySQL 5.5 docs:
传统上涉及创建和删除二级索引
复制 InnoDB 表中的所有数据的巨大开销。
InnoDB Plugin 的快速索引创建功能使得 CREATE
InnoDB 辅助的 INDEX 和 DROP INDEX 语句更快
索引。
MySQL 在 5.5 文档中提供以下建议:
因为索引维护会给许多数据增加性能开销
转移操作,考虑做ALTER TABLE之类的操作...
ENGINE=INNODB 或 INSERT INTO ... SELECT * FROM ... 没有任何
二级索引,然后创建索引。
如果您将 MySQL 5.5 或更高版本与 AWS 结合使用,则可以利用快速快速索引创建功能显着加快二级索引的创建速度。
快速索引创建 是 InnoDB 插件中首次引入的一项功能,现在是 5.5 及更高版本中 MySQL 服务器的一部分,可加快速度
通过避免需要创建 InnoDB 二级索引
完全重写关联表。加速适用于
也删除二级索引。