在MYSQL中使用多个条件和慢速更新查询

在MYSQL中使用多个条件和慢速更新查询,mysql,Mysql,我正在尝试基于另一个表(10k行)更新一个表(约200万行)。但是,我的更新查询需要非常长的时间(30分钟),到目前为止没有任何输出。有没有办法优化此查询 UPDATE global_mobility_report SET global_mobility_report.locationID1 = (SELECT geography.locationID FROM geography WHERE

我正在尝试基于另一个表(10k行)更新一个表(约200万行)。但是,我的更新查询需要非常长的时间(30分钟),到目前为止没有任何输出。有没有办法优化此查询

 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;