2017-03-10 4 views
0

Ich versuche, ein Join-Löschen zu tun und es Timeout. Ich bin mir nicht sicher, ob es sich um ein Cross-Join-Problem oder ein MySQL-Problem auf meiner Box handelt. Gewinnen Sie 7 64, mit MySQL 5.7.17 Community.mysql löschen Beitritt scheitert ohne Grund?

hatte ein Problem mit vipre av im Wettbewerb mit Trend wfb 9 das letzte Mal, dieses Problem begann und löste sich selbst (war AV-Produkte testen und ich weiß, dass Sie nicht 2 installiert haben sollten). Ich plane, meinen kleinen Datamart zu MySQL zu bewegen, kann aber nicht herausfinden, was dieses Problem verursacht, und kann nicht alles auf MySQL aufbauen, wenn ich nicht herausfinden kann, was vor sich geht.

So ist die SQL, die eine Zeitüberschreitung hält ist:

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

oder

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) 

oder viele andere Kombinationen davon ohne Glück. Die Tabelle hat keinen natürlichen Primärschlüssel, und der einzige zusammengesetzte Schlüssel wären alle Felder. Dies ist Teil eines Daten-ELT und ich möchte nur alle Spuren von alten Daten entfernen und die neuen Daten für die eingetroffenen Datensätze laden, während alte Datensätze, die nicht nur als Textdatei gesendet wurden, behalten werden (also keine abgeschnittene Tabelle).

Ich habe Innodb zu Myisam und zurück gedreht, die Tabelle gelöscht und neu erstellt, den Pfad von AV-Scans ausgeschlossen, av deaktiviert, av (Antivirus) entfernt. Ich habe va_option_id als Auto-Nummer pk hinzugefügt, nur um eine zu haben.

neue Daten kommt in, dass 50 bis 100 Datensätze pro Vin und Lager kombiniert hat und die Features Text ist unterschiedlich (Bodenmatte, DVD-Player, etc). Eigentlich von einem einzelnen Feld in einer CSV-Datei auf Zeilen für meinen Speicher normalisiert.

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 Aufzeichnungen

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; 

58151 Aufzeichnungen

hat gerade ein ähnliches löschen auf einem viel größeren Datenmenge ohne Frage kommen, aber die anderen Tabellen haben eine schöne Primärschlüssel Konsistenz (1 bis 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

raten könnte es die neue Kreuz Join, die implizit oben mit einem Vin und Lager mit einzigartigen Feature-Text Beitritt zu einem anderen Vin und Lager Combo mit 50 bis 100 andere einzigartige Feature-Werte. SET Zeitstempel = 1489169267; löschen cmdata.vauto_feed_options VON cmdata.vauto_feed_options, cmdata.vauto_feed_options_cache wo cmdata.vauto_feed_options.stock__ = cmdata.vauto_feed_options_cache.stock__ UND cmdata.vauto_feed_options.vin = cmdata.vauto_f [abgeschnitten, 278 Bytes insgesamt] – Philmee95

+0

Startzeit, Benutzer @Host, Abfragezeit, Sperrzeit, Zeilen gesendet, Zeilen untersucht, Detail 2017-03-10T18: 07: 47, root [root] @ localhost [127.0.0.1] Id: 4, 241.833845, 0.000000, 0, 302843058, – Philmee95

+0

Probieren Sie auch ein Löschen aus dem Hauptdetail Datensatz, der 1 Datensatz pro Vin + Lager Combo hat und es auch abgelaufen. löschen opt FROM cmdata.vauto_feed_options opt INNER verbinden vauto_feed_vehicles_cache veh on (opt.stock__ = veh.stock__); – Philmee95

Antwort

0

Sie müssen in beiden Tabellen einen Index für die Spalte __stock hinzufügen.

+0

das hat funktioniert. Die Löschung dauert 30 Sekunden, ist jedoch besser als die Zeitüberschreitung bei einem Fehler.Habe dieses Problem nicht in MS SQL. – Philmee95