gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:17:43 26 4
gpt4 key购买 nike

我有两个表:

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

我使用过的查询:

Update personaddresslist, CityList set CITY = cityList.ID where CITY = City_name

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

那么我们如何才能对其进行微调。

问候,卡宾德拉

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

最佳答案

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

  • 首先,您将city存储在PersonAddressList表中,并且数据类型为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 已建立索引,并且如果其主键最有可能,则默认情况下会建立索引。

关于MYSQL查询调优,通过下一个表的数据更新一个表的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27614717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com