mysql - 使用 LIKE 连接表时加快 Mysql UPDATE

标签 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;

这似乎超时了,我想知道是否是 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/

相关文章:

mysql - 获取自动递增整数的最接近的总和

mysql - 放置命令 'rails db:schema:dump' 时 Rails 中止

php - elseif 当 mysql 查询没有返回任何行时

mysql - XAMPP 文件夹中 MySQL 数据库表的确切位置是什么?

mysql - 数据库设计问题 - 性能需求

mysql - 根据 Laravel 和 MySQL 是否为 null 按两列排序

mysql - 在 MySQL 中创建函数时遇到问题

sql - 记录在案的 MySQL 连接可能不存在

PHP Mysql Ajax - 动态下拉菜单不起作用

mysql - 如何更改mysql中名称字段的结构