InnoDB对主要索引的性能增加/改变

时间:2012-06-20 13:59:41

标签: mysql performance innodb

所以我有一个巨大的更新,我必须在innodb表中插入大约40gb的数据。它需要一段时间,所以我想知道哪种方法最快(更重要的是,为什么,因为我可以进行分割测试)。

方法1)

a)插入所有行 b)创建ALTER TABLE su_tmp_matches ADD PRIMARY KEY(id)

方法2)

a)ALTER TABLE su_tmp_matches ADD PRIMARY KEY(id) b)插入所有行

目前我们正在使用方法1,但步骤b)似乎需要花费大量时间。所以我想知道这里是否有任何影响(40gb - 500万行)。

----所以我决定测试一下--- 相当快速的全新mysql服务器 - 加载和加载ram,快速ram,快速光盘以及非常好的调整(我们每秒有超过5000个请求):

1,6 mio行/ 6gb数据:

81秒“删除”主要索引

“添加”主索引550秒(添加数据后)

使用主索引创建表的副本120秒创建BEFORE数据插入

创建没有主索引的表副本80秒(之后创建550秒)

看起来很荒谬 - 问题是,如果索引是相同的东西。

1 个答案:

答案 0 :(得分:3)

来自the documentation

  

InnoDB没有针对单独索引的特殊优化   创建MyISAM存储引擎的方式。因此,确实如此   不支付导出和导入表并在之后创建索引。   将表更改为InnoDB的最快方法是执行插入操作   直接到InnoDB表。

在我看来,在插入之前添加unicity约束只能帮助引擎,如果具有主键的列是自动增量整数。但我真的怀疑会有一个显着的差异。

一个有用的建议:

  

在转换大表期间,增加InnoDB的大小   缓冲池减少磁盘I / O,最多为物理的80%   记忆。您还可以增加InnoDB日志文件的大小。

编辑:根据经验,MySQL在文档性能方面的表现并不总是如预期的那样,我认为你对此做的任何基准测试都会很有趣,即使本身并不是一个明确的答案。