0

我确实有两张桌子:

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

我用过的查询:

更新 personaddresslist,CityList 设置 CITY = cityList.ID where CITY = City_name

如果表的数据较少,上述查询运行良好,但如果两个表都没有大量数据,则继续滚动 n 滚动。在我的真实场景中,我在每个表中做了大约 5000 条记录的中等数据集。

那么我们如何才能很好地调整它。

问候, 卡宾德拉

编辑1:关于上述查询的结果,我花了将近40分钟才能完成脚本的运行,由于我需要在其他更多表上运行类似的脚本,我想微调并使其更快。

4

1 回答 1

0

您的表需要一些修改和索引以使其更快。

  • 首先要存储cityinPersonAddressList 表和数据类型varchar,即使它被索引它也永远不会使用它,因为它们在两个表中具有不同的数据类型。
  • 然后使用适当的索引。

我将从

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被索引,如果它的主键最有可能默认被索引。

于 2014-12-23T07:31:04.800 回答