【问题标题】: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 二级索引 完全重写关联表。加速适用于 也删除二级索引。

    【讨论】:

      猜你喜欢
      • 2020-02-06
      • 1970-01-01
      • 2014-06-10
      • 2020-06-22
      • 2011-09-17
      • 2021-09-19
      • 2012-12-21
      • 1970-01-01
      • 2015-11-17
      相关资源
      最近更新 更多