Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/MySQL批更新优化_Python_Mysql_Optimization - Fatal编程技术网

Python/MySQL批更新优化

Python/MySQL批更新优化,python,mysql,optimization,Python,Mysql,Optimization,我目前正试图确定在速度方面对MySQL数据库执行批量更新的最佳方法。不幸的是,每一行都需要一个单独的更新,我是根据表的ID(自动递增)来更新的。因此,每行需要一条UPDATE语句。该表本身大约有1200万条记录,我可能每天只需要更新大约100000条记录 对于批插入语句,我可以使用executemany()函数,但不幸的是,相同的函数似乎不会影响UPDATE语句。我已经读到,这是因为MySQL中允许此函数工作的优化是为插入而硬编码的 目前,我正在考虑创建一个临时表,该表将存储ID和update_

我目前正试图确定在速度方面对MySQL数据库执行批量更新的最佳方法。不幸的是,每一行都需要一个单独的更新,我是根据表的ID(自动递增)来更新的。因此,每行需要一条UPDATE语句。该表本身大约有1200万条记录,我可能每天只需要更新大约100000条记录

对于批插入语句,我可以使用executemany()函数,但不幸的是,相同的函数似乎不会影响UPDATE语句。我已经读到,这是因为MySQL中允许此函数工作的优化是为插入而硬编码的

目前,我正在考虑创建一个临时表,该表将存储ID和update_值的键值对,然后通过update join将其更新到需要更新的表中。考虑到数据库是链式复制拓扑的主节点,这是个好主意吗


我目前正在使用MyISAM作为此表的存储引擎,因为它经常被读取(但不是在更新的同时)。诚然,我没有使用InnoDB对其进行基准测试。我意识到MyISAM具有表级锁定,并且更新会在特定更新期间锁定整个表。如果我切换到InnoDB,MySQL是否足够智能,可以同时执行更新(如果通过ExecuteMy()提供),并且我是否可能看到速度有所提高?

步骤1:实施您拥有的技术。第二步:测量你已经掌握的技术的性能。步骤3:评估测量结果,看看是否有任何测量结果是可接受的(它们可能是可接受的)。第4步:找出阻碍性能的瓶颈。如果是Python代码,那么第5步:分析Python代码。第6步:用你的测量值和所需时间更新问题。这真的很难假设回答,因为我们没有您的服务器或数据库配置。谢谢-我会这样做,并报告回来。但是,我担心的是临时表和复制。有什么问题吗?抱歉有点偏离了原来的主题,但我确实觉得这与更新问题有关。临时表格通常是一个非常糟糕的主意。数据库速度很慢。非常慢。通常,进行此类更新的最佳方法是在数据库外部创建一个“替换”表:提取旧数据、更新和重新加载新数据。在数据库中处理“临时表”通常是一种设计的标志,这种设计应该在数据库之外使用平面文件。第二步:测量你已经掌握的技术的性能。步骤3:评估测量结果,看看是否有任何测量结果是可接受的(它们可能是可接受的)。第4步:找出阻碍性能的瓶颈。如果是Python代码,那么第5步:分析Python代码。第6步:用你的测量值和所需时间更新问题。这真的很难假设回答,因为我们没有您的服务器或数据库配置。谢谢-我会这样做,并报告回来。但是,我担心的是临时表和复制。有什么问题吗?抱歉有点偏离了原来的主题,但我确实觉得这与更新问题有关。临时表格通常是一个非常糟糕的主意。数据库速度很慢。非常慢。通常,进行此类更新的最佳方法是在数据库外部创建一个“替换”表:提取旧数据、更新和重新加载新数据。在数据库中处理“临时表”通常是一种设计的标志,这种设计应该在数据库之外使用平面文件。