gpt4 book ai didi

MySQL:使用连接更新需要很长时间

转载 作者:行者123 更新时间:2023-11-30 23:27:18 24 4
gpt4 key购买 nike

我有一个更新语句,它使用了一个非常耗时的连接。我将在下面提供更多详细信息,但这里是查询:

update quote_line
left join quote q on (q.id = quote_id and q.version = version )
set quote_serial_id = q.serial_id

背景故事:我正在尝试清理我继承的数据库。我有两个具有以下架构的表(仅显示重要的列):

引用:

serial_id  bigint(20)  -- Unique key defined with 'serial'
id bigint(20) -- Id of quote.
version smallint(6) -- Version of quote.

引用行:

id         bigint(20)  -- Unique key defined with 'serial'
quote_id bigint(20) -- Foreign key to quote.
version smallint(6) -- Foreign key to quote.

请注意,quote.id 不是键,但 quote.id+quote.version 是。无论出于何种原因,设计者决定使用 id+version 作为 quote_line 中的外键而不是 serial_id。在这里具体说明连接必须是如何完成的:

select q.id, q.version, q.serial_id
from quote q join quote_line l on q.id = l.quote_id and l.version = q.version

我想将 quote_line 中的 FK 更改为使用 quote.serial_id,这会给我以下更新语句:

update quote_line
left join quote q on (q.id = quote_id and q.version = version )
set quote_serial_id = q.serial_id

此声明在运行数小时后仍未完成。我试过在 quote 上创建索引,但没有任何改进。我正在运行 MySQL 5.5.14,所以我无法对更新运行解释。这两个表有这么多行:

引用:335517引用行:247992

您可以看到并非所有引号都有 quote_lines(事实上,大多数都没有)。关于如何使它运行得更快的任何提示?我最终不得不在我们的生产服务器上复制它,我不能花几个小时。

谢谢!

最佳答案

正如 Paul 和 sceaj 在评论中指出的那样,我使用的是 LEFT 连接。当我删除“LEFT”时,查询会在几秒钟内运行。感谢您的帮助!

关于MySQL:使用连接更新需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12611220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com