下面是我的查询
UPDATE cdata AS gcd
LEFT JOIN tar AS ap
ON gcd.dialled
LIKE CONCAT(ap.prefix, '%')
SET gcd.prefix=ap.prefix, gcd.destination1=ap.destination
WHERE gcd.prefix=0;
这似乎超时了,我想知道是否是 LIKE 正在这样做。 cdata 有大约 140000 条记录,它对 tar 的搜索大约有 25000 条记录。所以我猜 mysql 对 140000 条记录中的每条记录进行了 25000 次查找?
如果可能的话,我需要找到一种加快速度的方法。
感谢您的帮助
最佳答案
这有点hack,应该是更好的方法,也许使用UNION
?将其分为 7 个查询,每个可能的 ap.prefix 长度 1 个:
UPDATE cdata AS gcd
JOIN tar AS ap
ON substring(gcd.dialled, 1, 3) = ap.prefix
SET gcd.prefix=ap.prefix, gcd.destination1=ap.destination
WHERE gcd.prefix=0
;
-- ...
UPDATE cdata AS gcd
JOIN tar AS ap
ON substring(gcd.dialled, 1, 9) = ap.prefix
SET gcd.prefix=ap.prefix, gcd.destination1=ap.destination
WHERE gcd.prefix=0
;
运行所有查询,它应该在合理的时间内更新您的所有数据。 (注意:我切换到 JOIN
而不是 LEFT JOIN
以避免将 NULL
放入之前为 0 的行中)。
关于mysql - 使用 LIKE 连接表时加快 Mysql UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17976189/