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の1つのレコードがid_ad_linkのone(?)にリンクされています。id_ad_linkの多くはid_featuresの1つにリンクされており、id_featuresとid_imagesは1つです。tbl_sub_model(新しいデータベースにあります)には、ad_vehicleの主キーであるoldidというフィールドがあります。

私がやろうとしているのは、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 に答える