我目前正在尝试确定在速度方面对MySQL数据库执行批量更新的最佳方法。不幸的是,每一行都需要单独更新,我将其基于表的ID(自动递增)。因此每行需要一个UPDATE语句。该表本身约有1200万条记录,我可能只需要每天更新大约100,000条。
对于批处理INSERT语句,我可以使用executemany()函数,但不幸的是,相同的函数似乎不会影响UPDATE语句。我已经读到这是因为MySQL允许这个函数工作的优化是INSERTS的硬编码。
目前我正在考虑创建一个临时表,该表将存储ID和update_value的键值对,然后将其更新到需要通过更新连接进行更新的表中。考虑到数据库是链式复制拓扑的主设备,这是一个好主意吗?
我目前正在使用MyISAM作为此表的存储引擎,因为它经常被读取(但不会与更新同时读取)。不可否认,我没有使用InnoDB对其进行基准测试。我意识到MyISAM具有表级锁定,并且UPDATE将在特定更新期间锁定整个表。如果我切换到InnoDB是MySQL足够智能,如果通过executemany()提供同时执行更新,我可能会看到任何速度增加?