Ich habe eine MyISAM-Tabelle mit mehr als 10 ^ 7 Zeilen. Wenn ich Daten hinzufüge, muss ich ~ 10 Zeilen am Ende aktualisieren. Ist es schneller, sie zu löschen und dann die neuen einzufügen, oder ist es schneller, diese Zeilen zu aktualisieren? Daten, die aktualisiert werden sollen, sind nicht Teil des Indexes. Was ist mit der Fragmentierung von Indizes / Daten?
UPDATE
ist bei weitem viel schneller.
Wenn Sie UPDATE
eingeben, werden die Tabellensätze nur mit neuen Daten überschrieben.
Wenn Sie DELETE
, sollten die Indizes aktualisiert werden (denken Sie daran, Sie löschen die ganze Zeile, nicht nur die Spalten, die Sie ändern müssen) und Datenblöcke können verschoben werden (wenn Sie die PCTFREE
-Grenze treffen)
Und das alles muss wieder an INSERT
gemacht werden.
Deshalb sollten Sie immer
verwenden %Vor% anstelle von REPLACE
.
Der erste ist eine Operation UPDATE
im Falle einer Schlüsselverletzung, während der letzte DELETE
/ INSERT
ist.
Es ist schneller zu aktualisieren. Sie können auch INSERT ON DUPLICATE KEY UPDATE
verwenden %Vor%Weitere Informationen finden Sie in der Dokumentation
Anstatt Daten aus Gründen der Leistung zu löschen oder zu aktualisieren, würde ich eine Partitionierung in Erwägung ziehen.
Dadurch können Sie die Daten historisch beibehalten und die Leistung nicht beeinträchtigen.
Logisch DELETE + ADD = 2 Aktionen, UPDATE = 1 Aktion. Durch das Löschen und Hinzufügen neuer Änderungen werden IDs in auto_increment aufgezeichnet, wenn diese Datensätze also Beziehungen aufweisen, die unterbrochen werden oder auch aktualisiert werden müssen. Ich würde für UPDATE gehen.
Verwenden Sie ein Update, wobei Column = 'something' einen Index verwenden soll, solange sich das Suchkriterium im Index befindet (ob es sich bei einem Such- oder Scanvorgang um ein völlig anderes Problem handelt).
Wenn Sie diese Aktualisierungen häufig durchführen, aber keinen Index für die Kriterienspalte haben, würde ich empfehlen, einen Index für die von Ihnen verwendete Spalte zu erstellen. das sollte helfen, die Dinge zu beschleunigen.
Tags und Links mysql performance