2017-03-10 8 views
0

私は結合削除をしようとしていますが、タイムアウトしています。それがクロス結合の問題であるかMySQLの問題であるかはわかりません。 MySQL 5.7.17コミュニティで7 64を獲得してください。mysql delete joinは何の理由もなく失敗しますか?

は、前回この問題が起きて解決したvipre avに問題がありました(AV製品をテストしていましたが、2つをインストールする必要はありません)。私は小さなデータマートをMySQLに移行するつもりですが、何が起きているのか分からなければ、この問題の原因を突き止めることができず、MySQL上のすべてを構築することができません。

のでタイムアウトし続けSQLは次のとおりです。運と

DELETE prod 
FROM cmdata.vauto_feed_options as prod 
INNER JOIN cmdata.vauto_feed_options_cache stage 
using (stock__) 

または

delete prod 
FROM cmdata.vauto_feed_options as prod 
INNER JOIN cmdata.vauto_feed_options_cache stage 
ON (prod.stock__ = stage.stock__ 
AND prod.vin = stage.vin) 

またはその他の多くの組み合わせ。 テーブルには自然な主キーはなく、唯一の複合キーはすべてのフィールドです。これはデータELTの一部であり、古いデータのすべての痕跡を削除し、到着したレコードの新しいデータを読み込み、テキストファイルとして送信されなかった古いレコードを残したいだけです(テーブルは切り捨てられません)。

私はinnisbをmyisamに逆さにして、テーブルを削除して再作成し、avスキャンからのパスを除外しました。無効av、削除av(ウイルス対策)。私はva_option_idを自動番号pkとして追加しました。

新しいデータが入っていて、1ビン当たり50から100のレコードとストックコンボがあり、機能テキストは異なります(フロアマット、DVDプレーヤーなど)。実際には、csvファイルの1つのフィールドからストレージの行に正規化されています。

delete prod CREATE TABLE `vauto_feed_options` (
    `va_option_id` int(11) NOT NULL AUTO_INCREMENT, 
    `Stock__` varchar(10) NOT NULL, 
    `VIN` varchar(17) NOT NULL, 
    `Features` varchar(200) NOT NULL, 
    PRIMARY KEY (`va_option_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=297269 DEFAULT CHARSET=utf8; 

296303レコードの

CREATE TABLE `vauto_feed_options_cache` (
    `Stock__` varchar(10) DEFAULT NULL, 
    `VIN` varchar(17) DEFAULT NULL, 
    `Features` varchar(200) DEFAULT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

だけで同様の削除が無い問題と非常に大きなデータセットに参加しなかったが、それらの他のテーブルが1に素敵なプライマリキーの整合性(1を持つレコード)

delete prod 
FROM tblname_cache 
INNER JOIN tblname as prod 
ON ( prod.company_number = tblname_cache.company_number 
AND prod.record_key = tblname_cache.record_key) 
+0

他のヴィンとストックのコンボに50から100のユニークな特徴値を加えたユニークなフィーチャーテキストを持つvinとストックの上に暗黙の新しいクロス結合であると推測されます。 SET timestamp = 1489169267; cmdata.vauto_feed_optionsから削除をcmdata.vauto_feed_options 、cmdata.vauto_feed_options_cache cmdata.vauto_feed_options.stock__ = cmdata.vauto_feed_options_cache.stock__ AND cmdata.vauto_feed_options.vin = cmdata.vauto_f [切り捨て、278バイトの合計] – Philmee95

+0

開始時刻、ユーザー[ルート] @ localhost [127.0.0.1] ID:4,241.833845、0.000000、0、0、0、0、0、0、0、0、 302843058、 – Philmee95

+0

また、vin + stockコンボごとに1レコードを持つメインの詳細レコードから削除を試行し、またタイムアウトしました。 削除opt FROM cmdata.vauto_feed_options opt INNERはvauto_feed_vehicles_cache vehに参加します on(opt.stock__ = veh.stock__); – Philmee95

答えて

0

両方のテーブルの列__stockにインデックスを追加する必要があります。

+0

が働いた。削除には30秒かかりますが、失敗してタイムアウトするよりも優れています。MS SQLのこの問題はありませんでした。 – Philmee95

関連する問題