使用LIKE加入表时加快Mysql UPDATE

时间:2013-07-31 16:44:21

标签: mysql

以下是我的查询

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;

这似乎超时了,我想知道是不是这样做了。 cdata有大约140000条记录,它搜索tar大约有25000条。所以我猜mysql正在为140000条记录中的每条记录进行25000次查找?

如果可能,我需要找到加快速度的方法。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

这有点像黑客,应该是更好的方式,也许是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的行中。

答案 1 :(得分:0)

这种做法是错误的。您永远不应对无限期数据使用UPDATE查询。