繁体   English   中英

MYSQL查询调整,用于通过下一个表的数据更新一个表的数据

[英]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

上面的查询将更快,只需在应用索引之前确保CITYCity_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM