我试图将av.UnitType设置为ut.unittype中的值,只要三列匹配,并且我想知道该语句的哪些部分是这样的是导致它采取这么长时间:为什么这个更新查询如此之慢,我该如何改进它
SET SQL_SAFE_UPDATES=0;
UPDATE `db`.`table_av` av, `db`.`table_ut` ut
SET av.UnitType = ut.unittype
WHERE TRIM(LEADING '0' FROM av.id) = ut.id
AND av.veh = ut.veh
AND av.date LIKE CONCAT('%', ut.Year);
在可以使查询变慢的事情列表上,最糟糕的是“在比较中使用函数或计算字段值”...像TRIM()和CONCAT()这样的函数;列表中还有“LIKE条件与领先的通配符”....像'% “...在风格上,使用”逗号加入“符号已经过时并且几十年不受欢迎 – Uueerdo
将其更改为查找相关行的”SELECT“查询,然后使用”EXPLAIN“查看查询计划在这两个表的'veh'列中添加索引可能会有所帮助 – Barmar
这两个表的模式是什么?为什么一个ID的前导零和相关的一个没有? –