在MYSQL中使用多个条件和慢速更新查询
我正在尝试基于另一个表(10k行)更新一个表(约200万行)。但是,我的更新查询需要非常长的时间(30分钟),到目前为止没有任何输出。有没有办法优化此查询在MYSQL中使用多个条件和慢速更新查询,mysql,Mysql,我正在尝试基于另一个表(10k行)更新一个表(约200万行)。但是,我的更新查询需要非常长的时间(30分钟),到目前为止没有任何输出。有没有办法优化此查询 UPDATE global_mobility_report SET global_mobility_report.locationID1 = (SELECT geography.locationID FROM geography WHERE
UPDATE global_mobility_report
SET
global_mobility_report.locationID1 = (SELECT
geography.locationID
FROM
geography
WHERE
global_mobility_report.country_region = geography.country_region
AND global_mobility_report.sub_region_1 = geography.sub_region_1
AND global_mobility_report.sub_region_2 = geography.sub_region_2
AND global_mobility_report.metro_area = geography.metro_area
AND global_mobility_report.iso_3166_2_code = geography.iso_3166_2_code
AND global_mobility_report.census_fips_code = geography.census_fips_code);
相应指数的存在将得到改善
global\u mobility\u报告
中在geography
中没有相应行的行将不会更新(保持不变)。如果需要将它们设置为NULL,则使用左连接。我只是为国家/地区编制了索引,
亚区1,
次区域2,
都会区,
iso_3166_2_代码,
人口普查(census)fips(fips)代码栏(code columns),工作起来很有魅力! @Akina对不起,我可以要求更多的细节吗?我看不出我犯了什么错误,因为我试图基于另一个表(10k行)更新一个表(约200万行)。对于
地理位置中没有匹配行的所有行,此查询必须将全局移动报告.locationID1
设置为NULL。如果没有任何输出,您希望从更新查询返回什么?这不是SELECT…我将尝试此查询并查看处理时间。谢谢。请问这个查询是否需要几个小时或更长时间?我已经运行了一个小时左右,仍然没有输出…@CheeJiaYuan没有合适的索引,这个查询可能太长了-这是真的。但是当索引存在时,它必须很快(对于2kk和10k表,需要几分钟)。最好的方法是通过整个连接表达式(以任意列顺序)进行索引。
UPDATE global_mobility_report
JOIN geography USING ( country_region,
sub_region_1,
sub_region_2,
metro_area,
iso_3166_2_code,
census_fips_code )
SET global_mobility_report.locationID1 = geography.locationID;