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! Das könnte Sie auch interessieren:
|
<<: Hinweise zur Konfiguration mehrerer Proxys mithilfe von Vue-Projekten
Inhaltsverzeichnis 1. Einleitung 2. Tatsächliche ...
MySQL-Datenbank meldet FEHLER 1045 (28000): Zugri...
Kürzlich bestand der Kunde eines Projekts darauf,...
Dieser Artikel stellt hauptsächlich die Implement...
Inhaltsverzeichnis 1. Anweisungen 2. Modifikatore...
Das Miniprogramm implementiert einen vollständige...
Inhaltsverzeichnis Hintergrund Virtuelle Dateien ...
Ich habe gerade angefangen, React für Projekte zu...
Heute werde ich die grundlegendsten Funktionen von...
System- und Benutzerumgebungsdesign <br />D...
1. Einleitung Das Thema, ob Fremdschlüsseleinschr...
In diesem Artikel wird hauptsächlich das Vue-Proj...
Standardmäßig werden Breite und Höhe der Kopfzeil...
Denn wenn am Ende des Unterordners kein Schrägstri...
Inhaltsverzeichnis Vorwort 1. Konfigurieren Sie d...