为什么此更新查询速度如此之慢以及如何改进它

时间:2017-04-05 22:02:15

标签: mysql

我正在尝试将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);

1 个答案:

答案 0 :(得分:1)

将联接更改为当前使用的语法

SET SQL_SAFE_UPDATES=0;

UPDATE `db`.`table_av` av, 
    JOIN `db`.`table_ut` ut 
        ON TRIM(LEADING '0' FROM av.id) = ut.id
            AND av.veh = ut.veh
            AND av.date LIKE CONCAT('%', ut.Year);
    SET av.UnitType = ut.unittype

最后一行应该使用日期函数而不是像(如果可能的话)。更好的是,确保两列是 每个表中的兼容类型(即TIMESTAMP,或int或varchar中的至少4位数。