我的 MySQL 数据库中有一个大约有 500 万行的表。向表中插入行太慢,因为 MySQL 在插入时更新索引。如何在插入时停止索引更新并稍后单独建立索引?
谢谢 卡姆鲁尔
最佳答案
听起来您的表可能索引过多。也许在这里发布您的表定义,以便我们看看。
你有两个选择:
- 保留当前索引并删除未使用的索引。如果表上有 3 个索引,则每次对表进行写入时,都会对索引进行 3 次写入。索引仅在读取期间有用,因此您可能需要删除未使用的索引。在加载期间索引将被更新,这将减慢您的加载速度。
- 在加载前删除索引,然后在加载后重新创建它们。您可以在数据加载之前删除索引,然后插入和重建。重建可能比缓慢的插入花费更长的时间。您必须一一重建所有索引。如果在加载过程中加载重复项而不使用索引,唯一索引也可能会失败。
现在我建议您仔细查看表上的索引,如果在任何查询中都没有使用它们,则减少它们。然后尝试这两种方法,看看哪种方法适合您。据我所知,MySQL 中没有办法禁用索引,因为它们需要将插入的值写入其内部结构。
您可能想要尝试的另一件事是将 IO 拆分到多个驱动器上,即将表分区到多个驱动器上以获得一些硬件性能。
关于MySQL如何在插入行时忽略索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22163073/