Detaillierter Beispielcode einer MySQL-Batch-Einfügeschleife

Detaillierter Beispielcode einer MySQL-Batch-Einfügeschleife

Hintergrund

Als ich vor einigen Tagen Paging in MySql durchführte, sah ich einen Blog-Beitrag, in dem stand, dass die Verwendung des Limits 0,10 für Paging zu Datenverlust führen würde, während jemand anderes sagte, dass dies nicht passieren würde. Deshalb wollte ich es selbst testen. Während des Tests gab es keine Daten, also habe ich MySql installiert und eine Tabelle erstellt. Als ich eine While-Schleife erstellte, um 100.000 Testdaten stapelweise einzufügen, war die Ausführungszeit unerträglich, also suchte ich nach Informationen, um eine Möglichkeit zur Optimierung der Stapeleinfügung zu finden. Ich habe mir hier eine Notiz gemacht.

Datenstruktur

Da Standardspalten beim Paging in drei Szenarien unterteilt werden: Primärschlüsselspalte, Indexspalte und gemeinsame Spalte, muss die Testtabelle diese drei Szenarien enthalten. Die Syntax zur Tabellenerstellung lautet wie folgt:

Tabelle löschen, falls `test`.`t_model` existiert;

Erstellen Sie die Tabelle `test`.`t_model`( 
 `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel automatisch inkrementieren',
 `uid` bigint KOMMENTAR 'Primärschlüssel des Unternehmens',
 `modelid` varchar(50) COMMENT 'Charakter-Primärschlüssel',
 `Modellname` varchar(50) KOMMENTAR 'Name',
 `desc` varchar(50) COMMENT 'Beschreibung',
 Primärschlüssel („id“)
 EINZIGARTIGER Index `uid_unique` (`uid`),
 Schlüssel `modelid_index` (`modelid`) USING BTREE
)ENGINE=InnoDB Zeichensatz=utf8 sortieren=utf8_bin;

Zur Vereinfachung der Bedienung verwendet der Einfügevorgang eine gespeicherte Prozedur, um geordnete Daten über eine While-Schleife einzufügen, und die Leistung anderer Operationsmethoden oder Schleifenmethoden wird nicht überprüft.

Ausführungsprozess

1. Verwenden Sie die einfachste Methode, um 1W-Elemente direkt zu schleifen und einzufügen. Die Syntax lautet wie folgt:

Prozedur löschen, falls my_procedure vorhanden ist; 
Trennzeichen //
Prozedur my_procedure() erstellen
beginnen
 DECLARE n int DEFAULT 1;
 WÄHREND n < 10001 TUN
 in t_model einfügen (uid, modelid, modelname, `desc`) Wert (n, CONCAT('id20170831', n), CONCAT('name', n), 'desc'); 
 setze n = n + 1;
 ENDE WÄHREND;
Ende
// 
              Trennzeichen ;

Die Ausführungszeit zum Einfügen von 10.000 Datenelementen beträgt etwa 6 Minuten und 7 Sekunden. Bei dieser Geschwindigkeit dauert das Einfügen von 10 Millionen Datenelementen mehrere Tage.

2. Erwägen wir also das Hinzufügen eines Transaktions-Commits. Kann dies die Leistung beschleunigen? Der Test führt alle 1000 Datensätze ein Commit durch. Die Syntax lautet wie folgt:

Trennzeichen //
Prozedur u_head_and_low_pro() erstellen
beginnen
 DECLARE n int DEFAULT 17541;
 WÄHREND n < 10001 TUN
   in t_model einfügen (uid, modelid, modelname, `desc`) Wert (n, CONCAT('id20170831', n), CONCAT('name', n), 'desc'); 
   setze n = n + 1;
   wenn n % 1000 = 0 
   Dann
    begehen;
   Ende wenn;
 ENDE WÄHREND;
Ende
//
Trennzeichen ;

Die Ausführungszeit beträgt 6 Minuten und 16 Sekunden, was sich nicht wesentlich von der Ausführung ohne Commit unterscheidet. Es scheint, dass die Leistung des Batch-Einfügens auf diese Weise sehr gering ist.

3. Verwenden Sie die gespeicherte Prozedur, um eine Batch-Insert-Anweisung zu generieren und diese auszuführen, um 10.000 Datensätze einzufügen. Die Syntax lautet wie folgt:

Löschprozedur, WENN u_head_and_low_pro EXISTIERT;
Trennzeichen $$
Prozedur u_head_and_low_pro() erstellen
beginnen
 DECLARE n int DEFAULT 1;
 setze @exesql = 'in t_model(uid,modelid,modelname,`desc`)-Werte einfügen';
 setze @exedata = '';
 WÄHREND n < 10001 TUN
 setze @exedata = concat(@exedata,"(",n,",","'id20170831",n,"','","name",n,"','","desc'",")");
 wenn n % 1000 = 0 
 Dann
  setze @exesql = concat(@exesql,@exedata,";");
  bereiten Sie den Anweisungssatz von @exesql vor;
  Anweisung ausführen;
  DEALLOCATE, Anweisung vorbereiten;
  begehen; 
  setze @exesql = 'in t_model(uid,modelid,modelname,`desc`)-Werte einfügen';
  setze @exedata = "";
 anders
  setze @exedata = concat(@exedata,',');
 Ende wenn;
 setze n = n + 1;
 ENDE WÄHREND;
Ende;$$ 
Trennzeichen ;

Ausführungszeit 3,308 s.

Zusammenfassen

Verwenden Sie beim Einfügen in Stapeln die Stapelmethode zum Einfügen von Werten, wodurch die Ausführungsgeschwindigkeit erheblich verbessert wird.

Oben sehen Sie den ausführlichen Beispielcode für MySQL-Batch-Inserts in einer Schleife, der vom Herausgeber eingeführt wurde. Ich hoffe, er ist für alle hilfreich. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!
Wenn Sie diesen Artikel hilfreich finden, können Sie ihn gerne abdrucken und dabei bitte die Quelle angeben. Vielen Dank!

Das könnte Sie auch interessieren:
  • Beispiele für 4 Methoden zum Einfügen großer Datenmengen in MySQL
  • MySQL-Batch-Einfügungsdaten-Implementierungscode
  • Tutorial zur Implementierung von Batch-Einfügungen in MySQL zur Leistungsoptimierung
  • So vermeiden Sie MySQL-Batch-Einfügungen mit eindeutigen Indizes
  • Mysql verwendet Einfügen, um mehrere Datensätze einzufügen und Daten stapelweise hinzuzufügen
  • MySQL-Batch-Einfügen von Datenskript
  • Detaillierte Erläuterung der Leistungsoptimierung für MySQL-Batch-SQL-Einfügungen
  • MySql-Batch-Insert-Optimierung. Beispiel für SQL-Ausführungseffizienz. Detaillierte Erklärung
  • MySQL fügt Daten im Batch über gespeicherte Funktionsprozeduren ein

<<:  Hinweise zur Konfiguration mehrerer Proxys mithilfe von Vue-Projekten

>>:  Lösen Sie das Problem des schwarzen Bildschirms, nachdem VMware das Linux-System installiert und gestartet hat

Artikel empfehlen

Vue3 (III) Website Homepage Layout Entwicklung

Inhaltsverzeichnis 1. Einleitung 2. Tatsächliche ...

mysql: [FEHLER] unbekannte Option '--skip-grant-tables'

MySQL-Datenbank meldet FEHLER 1045 (28000): Zugri...

js-Methode zum Löschen eines Felds in einem Objekt

Dieser Artikel stellt hauptsächlich die Implement...

Detaillierte Erklärung des Synchronisierungsmodifikators von Vue

Inhaltsverzeichnis 1. Anweisungen 2. Modifikatore...

Miniprogramm zur Implementierung des kompletten Einkaufswagens

Das Miniprogramm implementiert einen vollständige...

Vite führt die Implementierung virtueller Dateien ein

Inhaltsverzeichnis Hintergrund Virtuelle Dateien ...

Elemente der Benutzererfahrung oder Elemente des Webdesigns

System- und Benutzerumgebungsdesign <br />D...

Vue+Element - benutzerdefinierte Abfragekomponente

In diesem Artikel wird hauptsächlich das Vue-Proj...