我正在研究由以前的程序员创建的在线注册表。我必须解决一堆围绕邮政编码和城市的数据完整性问题。我正在尝试使用我们加拿大邮政编码表和注册者表中的数据进行大型更新查询。我的查询似乎在我的开发环境上花了无限的时间。不知道为什么。

Create Temporary Table RegistrantToChange AS (
SELECT
    intID, vcCity, vcPostalCode
FROM
    tblRegistrantWebsiteSignUps
WHERE
    vcPostalCode NOT LIKE '00%' AND vcPostalCode!=''
        AND (vcCity = '' OR vcCity = 'unspecified')
);


UPDATE RegistrantToChange, tblPostalCodes
SET
    vcPostalCode = tblPostalCodes.PostalCode
WHERE
vcCity = tblPostalCodes.CityName;


请原谅可怕而又不一致的命名。我最近刚刚接手了这个项目,目前仍在重构整个过程。

最佳答案

临时表中的vcCity未建立索引,如果tblPostalCodes.CityName未建立索引,则更新中的JOIN有很多工作要做,可能需要一些时间。

我建议先在vcCity上创建一个带有索引的临时表,然后执行INSERT ... SELECT来填充它。确保为tblPostalCodes.CityName编制了索引,然后执行更新。

关于mysql - 使用非FK列匹配的另一个数据更新表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18087610/

10-12 17:24