Ich schreibe eine Anwendung und ich benutze MySQL als DBMS, wir laden Immobilienangebote herunter und es gab einige Leistungsprobleme. Die alte Architektur sah so aus: Eine Eigenschaft wird aktualisiert. Wenn die Anzahl der betroffenen Zeilen nicht 1 ist, wird das Update nicht als erfolgreich angesehen, andernfalls löst die Aktualisierungsabfrage unser Problem. Wenn das Update nicht erfolgreich war und die Anzahl der betroffenen Zeilen mehr als 1 ist, haben wir Duplikate und wir löschen alle. Nachdem wir die Duplikate bei Bedarf gelöscht haben, wenn das Update nicht erfolgreich war, erfolgt eine Einfügung. Diese Architektur funktionierte gut, aber es gab einige Geschwindigkeitsprobleme, da Eigenschaften gelöscht wurden, wenn sie 15 Tage lang nicht aktualisiert wurden. Theoretisch ist das Hauptproblem das Löschen von Eigenschaften, weil einige Eigenschaften für Monate am Leben sind und die Indizes sehr weit voneinander entfernt sind (wir sprechen von 500, 000+ Eigenschaften).ersetzt in haben eine Where-Klausel?
Unser Host sagte mir, dass ich anstelle von Eigenschaften ersetzen verwenden sollte und alle veralteten Eigenschaften sollten als DEAD betrachtet werden. Ich habe dies getan, aber wegen Syntaxfehlern traten Probleme auf und ich konnte nirgends ein Beispiel für replace in mit einer where-Klausel finden (Ich möchte eine DEAD-Eigenschaft durch die neue Eigenschaft ersetzen, statt die alte zu löschen Eigenschaft und fügen Sie ein neues ein, um Optimierung sicherzustellen). Meine Frage sah wie folgt aus:
replace into table_name(column1, ..., columnn) values(value1, ..., valuen) where ID = idValue
Natürlich habe ich berechnet IDValue und behandelt alles, aber ich hatte einen Syntaxfehler. Ich würde gerne wissen, ob ich falsch liege und es eine Where-Klausel gibt, in die ich ersetzen kann.
Ich habe eine alternative Lösung gefunden, die sogar besser ist als ersetzen (mit einer einfachen Update-Abfrage), weil Löschvorgänge hinter den Vorhängen passieren, wenn ich ersetzen, aber ich würde gerne wissen, wenn ich falsch liege wenn ich sage, dass ersetzen in hat keine Where-Klausel. Weitere Referenz finden Sie unter diesem Link:
http://dev.mysql.com/doc/refman/5.0/en/replace.html
Vielen Dank für Ihre Antworten im Voraus, Lajos Árpád
Vielen Dank für Ihre Antwort. In der Tat ist es ein Overkill, du hast absolut recht, ich will nur wissen, ob insert hat eine Where-Klausel zu filtern, was zu ersetzen, weil unser Gastgeber sagte, es hat und ich möchte die Angelegenheit klären (Wenn ich bereits gefunden habe Ich sehe keinen Grund, ihm das nicht zu sagen) ERSETZEN [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name, ...)] SELECT ... Wenn ich richtig verstanden habe, ist die obige Syntax, wo Sie sagen, dass ein wo erscheinen könnte. Sie haben Recht, aber die Where-Klausel ist in der Auswahl –
Und das Ersetzen in hat keine wo in dem Beispiel, so denke ich ersetzen in hat keine wo. –