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

在mysql中批量插入和更新多个表中的行的最佳方法,mysql,performance,optimization,bulkinsert,bulk,Mysql,Performance,Optimization,Bulkinsert,Bulk,我有10个表插入,每个插入都有1000条甚至10万条记录 还有4个表格更新。基本上,对于10万条记录来说,这将是10万条插入和40万条更新,这可以每小时运行一次。主要的限制是整个10个表插入和4个表更新必须在一个事务中 我了解了几种方法。为了处理更新,我可能会使用一个临时表,并将所有必须更新的ID转储到表中,然后从必须进行更新的实际表中使用与该临时表的联接。但对于批量插入10个表,我仍然没有一个有效的解决方案。它正在消耗很多时间。LOAD_DATA file是一个选项,但这可能不是一个好的选择,

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

我了解了几种方法。为了处理更新,我可能会使用一个临时表,并将所有必须更新的ID转储到表中,然后从必须进行更新的实际表中使用与该临时表的联接。但对于批量插入10个表,我仍然没有一个有效的解决方案。它正在消耗很多时间。LOAD_DATA file是一个选项,但这可能不是一个好的选择,因为在实时中,我可能最终会创建100到数千个文件,因为此操作将跨多个数据库和作用域进行。请给出提高批量插入速度的建议


我计划更改mysql中的“bulk\u insert\u buffer\u size”以及任何其他有用的参数。因此,任何一种建议都会对我有很大帮助

您是如何尝试进行这些批量插入的?您是否正在使用诸如phpMyAdmin之类的客户端GUI?请尝试在MySQL客户端提示符下运行SQL

abhay> mysql -u<your_user> -h<your_host> -p < <path_to_your_sql_file> 
abhay>mysql-u-h-p<
这应该足够快,可以完成所有的插入和更新。请记住在适用的地方输入实际值。SQL文件应该包含有效的INSERT和UPDATE语句

几点建议:

  • 您可以尝试在SQL文件的开头添加
    SET foreign\u key\u checks=0
    ,在末尾添加
    SET foreign\u key\u checks=1
  • 如果您的表有许多索引,临时禁用它们可能会有所帮助。尝试
    altertable…禁用键
    altertable…启用键
  • 您甚至可以选择拆分为多个SQL文件,每个表一个

  • 希望有帮助

    我正在尝试使用Java插入这些条目。我必须选择(也包括几个连接),比如说大量符合特定条件的记录,我必须处理这些记录,然后只有我会插入所有与这些选定记录实际相关的记录。这一过程必须及时进行。如果我要禁用索引,我必须及时这样做,而且频率可能会高到足以使整个系统以糟糕的方式运行。写入文件对我来说不是可行的解决方案。感谢您的输入。你觉得呢,没有具体的落实,;这取决于各种因素-涉及的场景、本地与远程数据库、所需的处理量、运行频率、MySQL流量等。我不确定您已经尝试了什么,但这里有一些要点:1]尝试优化选择和处理,以便尽可能快,2]尝试不频繁运行插入,3]读取所有数据后,在SQL文件中写入INSERT语句,然后按照上述建议运行。4]是否尝试延迟插入,不确定这些是否有帮助