三行代码  ›  专栏  ›  技术社区  ›  Dima

我的MariaDB更新中是否存在任何明显的瓶颈?

  •  -2
  • Dima  · 技术社区  · 3 周前

    我有一个MariaDB表,有2800万行。我需要用列中的新值更新所有行(本地)。这是Python中要批量更新的代码:

    update_query = "UPDATE table SET column = %s WHERE `index` = %s"
    %time cursor.executemany(update_query, update_data)
    

    column 具有索引,并且 index 是主键。

    当我使用一批100000行时,运行 executemany() 。我不确定这是很慢还是正常。如果速度很慢,我不知道从哪里开始加速。

    1 回复  |  直到 3 周前
        1
  •  0
  •   Barmar    3 周前

    不像 INSERT , executemany() 无法自动批处理 UPDATE 查询,因此瓶颈是执行100000个查询。

    相反,使用 INSERT INTO ... ON DUPLICATE KEY UPDATE ... 。这将自动进行批处理。

    update_query = 'INSERT INTO table (column, index) VALUES (%s, %s) ON DUPLICATE KEY UPDATE column = VALUES(column)'
    %time cursor.executemany(update_query, update_data)