在mysql中批量插入和更新多个表中的行的最佳方法

时间:2012-02-18 10:04:55

标签: mysql performance optimization bulkinsert bulk

我有10个表插入,每个插入1个1000或甚至1万个记录 并且还有4个表更新。基本上,对于10万条记录,它将是10万次插入和4万次更新,这可能每小时运行一次。主要的限制是整个10个表插入和4个表更新必须在一个事务中。

我阅读了几种方法。为了处理更新,我可能会使用临时表并将所有必须更新的ID转储到表中,然后使用与REAL表中的临时表的连接,必须完成更新。但是我仍然没有一个有效的解决方案来批量插入10个表。它耗费了大量的时间。 LOAD_DATA文件是一个选项,但这可能不是一个实时提供的好选择我最终可能会创建数以千计的文件,因为此操作将在许多数据库和范围内发生。请提出建议,以提高这些批量插入的速度。

我打算在mysql中更改“bulk_insert_buffer_size”以及任何其他有用的参数。所以任何建议都会对我有所帮助

1 个答案:

答案 0 :(得分:1)

您是如何尝试进行这些批量插入的?您使用的是像phpMyAdmin这样的客户端GUI吗?请尝试在MySQL客户端提示符上运行SQL。

abhay> mysql -u<your_user> -h<your_host> -p < <path_to_your_sql_file> 

这应该足够快以完成所有INSERT和UPDATES。请务必记住适用的实际值。并且SQL文件应该包含有效的INSERT和UPDATE语句。

很少有建议:

  1. 您可以尝试在SQL文件的开头添加SET foreign_key_checks = 0,在结尾添加SET foreign_key_checks = 1
  2. 如果您的表有很多索引,暂时禁用它们可能有所帮助。试试ALTER TABLE...DISABLE KEYSALTER TABLE...ENABLE KEYS
  3. 您甚至可以选择拆分为多个SQL文件,每个表一个
  4. 希望它有所帮助!