Heim  >  Artikel  >  Datenbank  >  Geben Sie Tipps zur Optimierung des Einfügens in Anweisungen

Geben Sie Tipps zur Optimierung des Einfügens in Anweisungen

零下一度
零下一度Original
2017-05-18 15:49:333212Durchsuche

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(&#39;BEGIN&#39;);
$params = array(&#39;value&#39;=>&#39;50&#39;);
for($i=0;$i<2000000;$i++){ 
$connect_mysql->insert($params);
if($i%100000==0){
$connect_mysql->query(&#39;COMMIT&#39;);
$connect_mysql->query(&#39;BEGIN&#39;);
}
}
$connect_mysql->query(&#39;COMMIT&#39;);
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.="(&#39;50&#39;),";
};
$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 Unterschiede

Das 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn