Das Skript, an dem ich arbeite, wurde entwickelt, um eine Datenbanktabelle zu aktualisieren, die das Land der Verwendung und den Status aller IP-Adressen (oder fast aller) aufzeichnet. Momentan behalte ich es einfach und hole nur Daten von den 5 RIRs (regionale Internet Registries) und speichere diese in meiner Datenbank.Änderung der Geschwindigkeit der SQL-Einfügungen
Anfangs waren die Geschwindigkeiten nicht praktikabel, aber sie wurden deutlich verbessert, indem die Menge der Informationen im Protokoll reduziert und die SQL-Einfügungen in Gruppen von 1000 gruppiert wurden und eine einzige Abfrage verwendet wurde. Wenn ich das Skript jetzt ausführe, bekomme ich sehr große Schwankungen in der Geschwindigkeit der SQL-Einfügungen und ich fragte mich, ob jemand wüsste warum.
Hier sind einige der Geschwindigkeiten, die ich aufgezeichnet habe. Im Test habe ich die Zeit für die Ausführung der Iterationen des Skripts in PHP und die Zeit für die Anwendung der SQL-Anweisung getrennt. Ich habe die PHP-Zeiten nicht in die Liste aufgenommen, da der Effekt vernachlässigbar war. nicht einmal 1 Sekunde für die größten Datenblöcke.
Prüfdrehzahlen (Anzahl der Datenzeilen eingefügt ist gleich bleibt in)
Test 1 Gesamt SQL Ausführen Zeit: 33 Sekunden
Test 2 Gesamt SQL Ausführen Zeit: 72 Sekunden
Test 3 Tota l SQL Ausführungszeit: 78 Sekunden
Andere Tests schwankten weiter zwischen ~ 30 Sekunden und ~ 80 Sekunden.
Ich habe zwei Fragen:
1) Soll ich diese Unterschiede als die Art und Weise der Welt übernehmen, oder gibt es einen Grund für sie?
2) Ich war nervös, weil ich die ~ 185000 Zeileneinsätze in eine Abfrage eintauchten. Gibt es einen Grund, warum ich vermeiden sollte, eine Abfrage für diese Einsätze zu verwenden? Ich habe nicht mit dieser Datenmenge gearbeitet, die vorher gespeichert wurde.
Danke
__
Die Datenbanktabelle ist wie folgt.
Sorage Engine - InnoDB
Spalten:
id - int, Primärschlüssel
Register - VARCHAR (7)
code - VARCHAR (2)
Typ - varchar (4)
Start - varchar (15)
Wert - int
Datum - Datumzeit
Status - varchar (10)
Es gibt eine konfigurierbare maximale Länge für Befehle in MySQL - der Standard ist 1 MB. Mit 185.000 Zeilen könnten Sie dieses Limit erreichen. Sie können es natürlich erhöhen, und ich weiß nicht, warum Sie nicht sollten. – Argeman
Ich nehme an, Sie verwenden Standard-Innodb-Tabelle Typ? – Argeman
80 Sekunden für einen Einsatz, sogar 1000 Zeilen, klingt sehr lang. Ich breche oft in Gruppen von 100 auf und sie passieren schnell genug ("sofort" ish), dass ich mir nie Sorgen gemacht habe - das würde ich mit 1000 Reihen ähnlich erwarten. Faktoren, die es verlangsamen könnten - Netzwerkverkehr (aber nicht 80 Sekunden Arbeit), zu viele Indizes (wieder nicht genug Zeit) und Auslöser (haben Sie irgendwelche?). Aber du solltest viel, viel schneller als das bekommen - ich würde tiefer graben. Aber vergleichen Sie 100 vs 1000 vs 10.000, bevor Sie für das Los prall! – Robbie