Frage

Ich habe Daten, die ich in die Tabelle einfügen sollte. Vor dem Einfügen muss ich jedoch gegen doppelte Datensätze und Berichtsliste dieser Aufzeichnungen überprüfen.

Tisch:

CREATE TABLE `test` (
  `A` varchar(19) NOT NULL,
  `B` varchar(9) NOT NULL,
  KEY `A` (`A`),
  KEY `B` (`B`)
) ENGINE=InnoDB;

Ich muss nach beiden Spalten überprüfen:

Anzahl der Datensätze zum Einfügen: ~ 1000

Zeilen in der Tabelle: ~ 1.000.000

Was ist die effiziente Art, dies zu tun?

Danke im Voraus.

War es hilfreich?

Lösung

Dies würde vom Layout der Tabelle abhängen.

Angenommen, Sie haben die folgende Tabelle

CREATE TABLE `mydata` ( 
    `A` varchar(19) NOT NULL, 
    `B` varchar(9) NOT NULL, 
    KEY `A` (`A`), 
    KEY `B` (`B`) 
) ENGINE=InnoDB; 

Bevor Sie 1000 Zeilen in mydata einfügen, können Sie sie in einen anderen Tisch namens MyNewdata wie folgt einladen:

CREATE TABLE mynewdata LIKE mydata;
CREATE TABLE mynewdups LIKE mydata;
INSERT INTO mynewdata ... ;
INSERT INTO mynewdups SELECT * FROM mynewdata;

Als nächstes löschen

DELETE T1.* FROM mynewdata T1 INNER JOIN mydata T2 ON T1.A=T2.A OR T1.B=T2.B;

Was in Mydata übrig bleibt, sind Zeilen, die keine A- oder B -Übereinstimmung haben

Was ist mit den übereinstimmenden Zeilen? Führen Sie das aus

DELETE T1.* FROM mynewdups T1 LEFT JOIN mydata T2
ON T1.A=T2.A OR T1.B=T2.B
WHERE T2.A IS NOT NULL;

Was in mynewdata übrig bleibt, sind Daten zum Importieren

Was in MyNewdups übrig bleibt, sind Daten mit einem DUP -Schlüssel in Mydata

Versuche es !!!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top