Vinzenz Mai: MySQL update einer indizierten Tabelle

Beitrag lesen

Hallo Carsten,

und "insert" mit "replace ..." erledigen, da die Suchworte in Tab2 indiziert sind?

Was meinst Du damit? Ich vermute "nein".

Bei indizierten oder uniquen Werten kann man statt "insert" "replace" verwenden. "replace" überprüft erst, ob der _indizierte_ Wert bereits vorhanden ist. Falls ja, dann wird der vorhandene DS ersetzt. Im anderen Fall wird ein neuer DS eingefügt.

das kannst Du nicht wollen! Es bedeutet, dass das Suchwort bereits vorhanden ist. Es bedeutet, dass mit an Sicherheit grenzender Wahrscheinlichkeit, dieses Suchwort mit Datensätze(n) in Tabelle 1 über Tabelle 3 verknüpft ist.

REPLACE löscht den Datensatz und legt ihn dann mit den Standardwerten neu an. Da Du die id nicht kennst, wird eine neue angelegt - ich gehe davon aus, dass Du Autoincrement-Werte verwendest. Du kannst auf den alten Wert jedoch nicht zurückgreifen, so dass Du kein Update für die anderen Datensätze durchführen kannst.

Aus diesem Grund folgt: Du willst REPLACE *NICHT* verwenden!

Du führst ein INSERT durch. Gelingt es, so hast Du die neue ID über LAST_INSERT_ID(). Schlägt es fehl, so ermittelst Du mit einem SELECT die zugehörige ID.

Was geht wohl schneller, wenn mir mal von einem Datenvolumen von Tab1->200.000, Tab2->400.000, Tab3->4.000.000 ausgehen?

INSERT in Tabelle 2 vornehmen, Fehlermeldung wegen Schlüsselverletzung entsprechend behandeln, d.h. in diesem Fall das SELECT vornehmen.

Wunderbarer Anwendungsfall für Prepared Statements.

Inwiefern?

weil es immer wieder das gleiche Statement ist, das ausgeführt wird - nur mit anderen Werten. Somit entfällt das Parsen der Query (und Du hast den angenehmen Nebeneffekt, dass Du Dich nicht um das Maskieren der Werte kümmern musst).

Freundliche Grüße

Vinzenz