0

当我运行这个查询时,它似乎从来没有做任何事情,cpu 使用率上升到 30% 并保持在那里,最终 mysql 工作台超时。有没有办法更有效地做到这一点?

insert ignore into tbl_sub_model_image
select sub_model_sk,tbl_image.image_id
from tbl_sub_model sm
inner join autotalk_identicar_old.ad_vehicle av on av.vehiclekey=sm.oldid
inner join autotalk_identicar_old.id_ad_link al on av.vehiclekey=al.rbvehiclekey
inner join autotalk_identicar_old.id_features f on f.vehiclekey=al.idvehiclekey
inner join autotalk_identicar_old.id_images i on i.id_vehiclekey=f.vehiclekey
inner join tbl_image im on i.id_images.image=im.img_lnk
where substring(id_images.image,-4) <> '.tif';

基本上在旧数据库中,ad_vehicle 中的一条记录链接到 id_ad_link 中的一条(?)。id_ad_link 中的许多都与 id_features 中的一个相关联,并且 id_features 和 id_images 是一一对应的。在 tbl_sub_model(位于新数据库中)中,我有一个名为 oldid 的字段,它是 ad_vehicle 的主键。

我想要做的是,我有一个 tbl_image 但图像已分配新的自动编号,所以我需要将旧数据库连接在一起,以找出我需要将哪些图像分配给新模型中的哪个子模型。文件路径。

所有的表都没有超过 60,000 条记录,但它似乎永远无法执行,奇怪的是在过去的几个月里,我一直在另一个虚拟机上很好地执行它,但现在在一个新的它只是行不通。它要么陷入循环,要么永远持续下去。

有人可以帮我修复/改进它吗?

4

2 回答 2

0

找出问题所在。连接上使用的一些列没有被索引,所以这就是为什么要花很长时间来进行查询。

所以这个故事的寓意是......索引是你的朋友

于 2012-12-12T05:41:52.267 回答
0

好像你可以剪掉一些连接......

insert ignore into tbl_sub_model_image
select sub_model_sk,tbl_image.image_id
from tbl_sub_model sm
inner join autotalk_identicar_old.ad_vehicle av on av.vehiclekey=sm.oldid
inner join autotalk_identicar_old.id_images i on i.id_vehiclekey=av.vehiclekey
inner join tbl_image im on i.id_images.image=im.img_lnk
where substring(id_images.image,-4) <> '.tif';
于 2012-12-09T22:14:02.907 回答