社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

用两个表优化MySQL更新查询

Thomas • 3 年前 • 1494 次点击  

在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
 
1494 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Rick James
Reply   •   1 楼
Rick James    3 年前

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

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