MYSQL-Batch-Insert-Datenbank zur Implementierung der Analyse der Anweisungsleistung
Angenommen, unsere Tabellenstruktur ist wie folgt
Der Code lautet wie folgt
CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value VARCHAR( 50 ) NOT NULL, other_value VARCHAR( 50 ) NOT NULL )
Normalerweise fügen wir ein Eine einzelne SQL-Anweisung. Schreiben Sie wie folgt:
Der Code lautet wie folgt:
INSERT INTO example (example_id, name, value, other_value) VALUES (100, 'Name 1', 'Value 1', 'Other 1');
MySQL ermöglicht es uns, Daten stapelweise in eine SQL-Anweisung einzufügen, wie folgt: SQL-Anweisung:
Der Code lautet wie folgt
INSERT INTO example (example_id, name, value, other_value) VALUES (100, 'Name 1', 'Value 1', 'Other 1'), (101, 'Name 2', 'Value 2', 'Other 2'), (102, 'Name 3', 'Value 3', 'Other 3'), (103, 'Name 4', 'Value 4', 'Other 4');
Wenn die Reihenfolge der von uns eingefügten Spalten mit der Reihenfolge der Spalten in der Tabelle übereinstimmt, können wir die Definition der Spaltennamen auch weglassen, wie folgt: sql
Der Code lautet wie folgt
INSERT INTO example VALUES (100, 'Name 1', 'Value 1', 'Other 1'), (101, 'Name 2', 'Value 2', 'Other 2'), (102, 'Name 3', 'Value 3', 'Other 3'), (103, 'Name 4', 'Value 4', 'Other 4');
Das Obige sieht nicht so aus Frage, lassen Sie mich einige Tipps zur SQL-Anweisungsoptimierung verwenden. Ich werde sie unten separat testen von Daten in eine leere Datentabelle
Die erste Methode : Verwenden Sie „Einfügen“ in „Einfügen“. Der Code lautet wie folgt:
$params = array('value'=>'50'); set_time_limit(0); echo date("H:i:s"); for($i=0;$i<2000000;$i++){ $connect_mysql->insert($params); }; echo date("H:i:s");
Die endgültige Anzeige lautet: 23: 25:05 01:32:05, was bedeutet, dass es mehr als 2 Stunden gedauert hat!
Die zweite Methode : Verwenden Sie die Transaktionsübermittlung, um sie stapelweise in die Datenbank einzufügen (alle 100.000 Elemente senden). Die letzte angezeigte Zeit ist: 22:56:13 23:04:00, insgesamt 8 Minuten und 13 Sekunden. Der Code lautet wie folgt:
echo date("H:i:s"); $connect_mysql->query('BEGIN'); $params = array('value'=>'50'); for($i=0;$i<2000000;$i++){ $connect_mysql->insert($params); if($i%100000==0){ $connect_mysql->query('COMMIT'); $connect_mysql->query('BEGIN'); } } $connect_mysql->query('COMMIT'); echo date("H:i:s");
Die dritte Methode : Optimierte SQL-Anweisungen verwenden: SQL-Anweisungen zusammenfügen, Werte (),(),(),() in die Tabelle einfügen () verwenden und sie dann alle auf einmal einfügen. Wenn die Zeichenfolge zu lang ist,
, Sie müssen MYSQL konfigurieren und in der MySQL-Befehlszeile ausführen: set global max_allowed_packet = 2*1024*1024*10; die Verbrauchszeit beträgt: 11:24:06 11:25 :06;
Das Einfügen von 2 Millionen Testdaten dauerte nur 1 Minute! Der Code lautet wie folgt:
$sql= "insert into twenty_million (value) values"; for($i=0;$i<2000000;$i++){ $sql.="('50'),"; }; $sql = substr($sql,0,strlen($sql)-1); $connect_mysql->query($sql);
Zusammenfassend lässt sich sagen, dass die erste Methode beim Einfügen großer Datenmengen zweifellos die effektivste ist. Schlecht, aber die zweite Methode wird in der Praxis häufiger verwendet. Die dritte Methode eignet sich besser zum Einfügen von Testdaten oder anderen geringen Anforderungen und ist sehr schnell.
[Verwandte Empfehlungen]
1. Teilen Sie ein Tutorial zum stapelweisen Einfügen mehrerer Datensätze mit einer Einfügeanweisung
2 Verwendete MySQL-Befehle Drei Arten von Einfügungsanweisungen und ihre UnterschiedeDas obige ist der detaillierte Inhalt vonGeben Sie Tipps zur Optimierung des Einfügens in Anweisungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!