gpt4 book ai didi

mysql性能为什么更新1000行比更新一行* 1000多3-4倍

转载 作者:行者123 更新时间:2023-11-29 04:05:03 25 4
gpt4 key购买 nike

如果我尝试

UPDATE my_table t1, my_table t2 
SET
t1.hash1 = UNHEX(MD5(t2.original)),
t1.hash2 = UNHEX(MD5(t2.translated))
WHERE t1.id = 1;

我得到了这个结果

Query OK, 1 row affected (0.09 sec)

但如果我尝试这样做:

UPDATE my_table t1, my_table t2 
SET
t1.hash1 = UNHEX(MD5(t2.original)),
t1.hash2 = UNHEX(MD5(t2.translated))
WHERE t1.id < 1000;

结果是:

Query OK, 998 rows affected (5 min 13.66 sec)

预计 0.09 * 1000/60 = 1.5 分钟

我首先使用了 https://dba.stackexchange.com/a/124733/146439 中的那个:

SET GLOBAL join_buffer_size = 1024 * 1024 * 42;

还有其他技巧可以改善更新时间吗? (MyISAM 引擎)

最佳答案

这是在做一个交叉连接,一个笛卡尔积:

UPDATE my_table t1, my_table t2 
SET
t1.hash1 = UNHEX(MD5(t2.original)),
t1.hash2 = UNHEX(MD5(t2.translated))
WHERE t1.id < 1000;

您可以通过执行以下操作来计算尝试更新的次数:

select count(*)
from my_table t1 cross join my_table t2
where t1.id < 1000;

如果答案是数百万,我不会感到惊讶。

您可以通过以下方式更快地获得计数:

select sum( id < 1000) * count(*)
from my_table ;

道德? 永远不要FROM 子句中使用逗号。 始终使用正确、明确的 JOIN 语法。

关于mysql性能为什么更新1000行比更新一行* 1000多3-4倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49721774/

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