[英]MYSQL Query Tuning for updating data of one table by data of next table
我有两个表:
1. PersonAddressList [About 5,000 records]
Columns:
ID int
TITLE varchar
CITY varchar
2. CityList [About 5,000 recods]
Columns:
ID int
City_Name varchar
City_State int //[RK to State]
以前的设计师直接在表1 [personaddresslist]中添加了城市名称。 现在我对其进行规范化,并将表1中的城市名称替换为表2中的城市ID
我使用过的查询:
更新人员地址列表,将CityList设置为CITY = cityList.ID,其中CITY = City_name
上面的查询运行良好,如果表中有较少的数据,但在这两个表的情况下滚动ň滚动保持有大量没有数据。 在我的实际场景中,我在每个表中存储大约5000条记录的中等数据集。
因此,我们如何调整它。
问候,卡宾德拉
编辑1:关于从上面的查询结果,我花了近40分钟来完成脚本的运行,因为我需要在其他多个表运行类似的脚本,我想微调,使其速度更快。
您的表需要进行一些修改和索引以使其更快。
city
存储在PersonAddressList
表中,数据类型为varchar
因此即使索引了city
,也将永远不会使用它,因为两个表中的数据类型都不相同。 我将从
alter table PersonAddressList add index city_idx(CITY);
alter table CityList add index City_Name_idx(City_Name);
然后将使用以下更新命令
update PersonAddressList p
join CityList c on c.City_Name = p.CITY
set p.CITY = c.ID
上面的查询将更快,只需在应用索引之前确保CITY
和City_Name
都是相同的数据类型且大小相同即可。
数据更新后,您需要修复结构
drop index city_idx from PersonAddressList ;
alter table PersonAddressList change CITY CITY int ;
alter table PersonAddressList add index city_idx(CITY);
最后,确保对CityList
ID
进行了索引,并且默认情况下是否会为其最可能的主键进行索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.