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

标签 mysql insert indexing bulkinsert

我的 MySQL 数据库中有一个大约有 500 万行的表。向表中插入行太慢,因为 MySQL 在插入时更新索引。如何在插入时停止索引更新并稍后单独建立索引?

谢谢 卡姆鲁尔

最佳答案

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

你有两个选择:

  1. 保留当前索引并删除未使用的索引。如果表上有 3 个索引,则每次对表进行写入时,都会对索引进行 3 次写入。索引仅在读取期间有用,因此您可能需要删除未使用的索引。在加载期间索引将被更新,这将减慢您的加载速度。
  2. 在加载前删除索引,然后在加载后重新创建它们。您可以在数据加载之前删除索引,然后插入和重建。重建可能比缓慢的插入花费更长的时间。您必须一一重建所有索引。如果在加载过程中加载重复项而不使用索引,唯一索引也可能会失败。

现在我建议您仔细查看表上的索引,如果在任何查询中都没有使用它们,则减少它们。然后尝试这两种方法,看看哪种方法适合您。据我所知,MySQL 中没有办法禁用索引,因为它们需要将插入的值写入其内部结构。

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

关于MySQL如何在插入行时忽略索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22163073/

相关文章:

mysql - 如何向mysql表中插入数据?

MySQL在插入之前进行测试,如果满足条件则取消

c++ - 如何在循环中将元素添加到空 vector ?

MySQL 索引 |与 LIKE 一起使用

python - 如果维度可能变化,如何访问数组元素?

mysql - 同一查询每次返回的记录数不同

mysql - 类型之间的空间是什么意思?

MySQL 选择用 NULL 分隔的数据系列之间的日期范围

oracle - 'ORA-01031 : insufficient privileges' error received when inserting into a View

mysql - 创建 SQL 索引?