MySQL如何在插入行时忽略索引

时间:2014-03-04 04:39:17

标签: mysql insert indexing bulkinsert

我的MySQL数据库中有一个包含5M行的表。在插入时,MySQL更新索引时,向表中插入行的速度太慢。如何在插入时停止索引更新并在以后单独进行索引?

由于 Kamrul

1 个答案:

答案 0 :(得分:0)

听起来您的表格可能已过度索引。也许在这里发布您的表定义,以便我们可以看看。

您有两种选择:

  1. 保留当前索引并删除未使用的索引。如果每个表写入一个表上有3个索引,则会有3个写入索引。索引仅在读取期间有用,因此您可能希望删除未使用的索引。在负载期间,将更新索引,这将减慢您的负载。
  2. 在加载之前删除索引,然后在加载后重新创建它们。您可以在数据加载之前删除索引,然后插入并重建。重建可能比慢插入需要更长的时间。您将不得不逐个重建所有索引。如果在没有索引的加载过程中加载重复项,则唯一索引也会失败。
  3. 现在我建议您仔细查看表中的索引,如果它们未在任何查询中使用,请减少它们。然后尝试两种方法,看看哪些方法适合你。在MySQL中我无法知道如何禁用索引,因为它们需要将值插入写入其内部结构。

    您可能想要尝试将IO拆分为多个驱动器,即将表分区到多个驱动器上以获得一些硬件性能。