Py学习  »  DATABASE

用两个表优化MySQL更新查询

Thomas • 3 年前 • 1443 次点击  

在MySQL服务器上,我在一个名为weather的表中有1400万行和20列,在一个名为incident的表中有1900行和15列。我试图将weather中的活动列设置为1,其中weather date列位于事件表的开始和结束日期列之间,weather location列等于Event location列。我有以下问题,我不确定这是否是最有效的方法。它目前已经在AWS RDS db上运行了一个小时。m5。4XL(16个vCPU和64 GB RAM)。根据AWS控制台,它只使用了8%的CPU。

UPDATE dev.weather, dev.incident
SET weather.active = 1
WHERE weather.location = incident.location AND weather.DATE BETWEEN dev.incident.start_date AND dev.incident.end_date

有没有更好的方法来实现这一点?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131461
 
1443 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Rick James
Reply   •   1 楼
Rick James    3 年前

等我们想出一个满意的解决方案时,你的问题就会解决了。但这里有一些想法。

  • UPDATE ,特别是如果修改了很多行,这非常耗时。(这是因为在回滚时需要保存旧行。)
  • 如果没有索引,我就无法对事情给出完整的建议。
  • 这是一次性查询,对吗?将来的“事件”会在存储事件时进行更新,对吗?这可能会运行得相当快。
  • 考虑到您有一种针对单个事件进行更新的方法,请将其作为进行初始更新的基础 使现代化 (你现在问的那个)。也就是说,编写一个特殊的一次性程序来运行1900个事件,执行必要的更新。(优点:只需编写一个更新。)
  • 一定要 COMMIT 每次更新之后。(或与 autocommit=ON 否则1900次更新将是系统的一大负担,可能比开始讨论的单一更新更糟糕。