Heim >Datenbank >MySQL-Tutorial >Warum ist die Leistung meines InnoDB INSERT so viel langsamer als die von MyISAM?
Leistungsproblem mit MySQL InnoDB-Einfügevorgängen
Einführung
Einfügen von Daten in MySQL-Tabellen mit Die InnoDB-Engine kann in bestimmten Szenarien deutlich länger dauern als erwartet. Dieser Artikel befasst sich mit diesem Leistungsproblem und bietet eine Lösung.
Schlüsselfrage
Warum ist das Einfügen von Daten in MySQL InnoDB-Tabellen übermäßig langsam?
Analyse
Das bereitgestellte Testskript zeigt einen starken Unterschied in der Einfügeleistung zwischen MyISAM und InnoDB-Speicher-Engines. MyISAM schließt das Einfügen von 1 Million Zeilen in etwa 6 Sekunden ab, während InnoDB für die gleiche Aufgabe über 3400 Sekunden benötigt.
Erklärung
Der Hauptgrund für diese Leistungslücke liegt in den grundlegenden Designunterschieden zwischen MyISAM und InnoDB. MyISAM verfügt nicht über Transaktionsunterstützung, sodass Daten effizienter eingefügt werden können. Im Gegensatz dazu erzwingt InnoDB die Transaktionsintegrität und erfordert einen Commit-Vorgang nach jeder Anweisung. Standardmäßig führt InnoDB nach jedem Einfügen einen Log-Flush auf die Festplatte durch, was zu einem erheblichen Leistungsaufwand führt.
Lösung
Um dieses Leistungsproblem zu entschärfen, ist es entscheidend, es zu nutzen Die Transaktionsverarbeitungsfunktionen von InnoDB effektiv nutzen. Indem wir die Einfügeanweisungen in eine explizite Transaktion einschließen, können wir die Häufigkeit von Festplattenschreibvorgängen reduzieren und die Einfügegeschwindigkeit erheblich verbessern.
Um dies zu erreichen, führen Sie die folgende Anweisung aus, bevor Sie die Einfügeschleife starten:
START TRANSACTION
Nachdem Sie die Einfügevorgänge abgeschlossen haben, schreiben Sie die Transaktion mit der folgenden Anweisung fest:
COMMIT
Das obige ist der detaillierte Inhalt vonWarum ist die Leistung meines InnoDB INSERT so viel langsamer als die von MyISAM?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!