So fügen Sie in 88 Sekunden 10 Millionen Datensätze in eine MySQL-Datenbanktabelle ein

So fügen Sie in 88 Sekunden 10 Millionen Datensätze in eine MySQL-Datenbanktabelle ein

Die von mir verwendete Datenbank ist MySQL Datenbank Version 5.7

Bereiten Sie die Datenbanktabelle zunächst selbst vor

Tatsächlich sind beim Einfügen von 10 Millionen Daten einige Probleme aufgetreten. Jetzt werde ich diese zuerst lösen. Zu Beginn trat beim Einfügen von 1 Million Daten ein Fehler auf. Die Konsoleninformationen lauten wie folgt:

com.mysql.jdbc.PacketTooBigException: Paket für Abfrage ist zu groß (4232009 > 4194304). Sie können diesen Wert auf dem Server ändern, indem Sie die Variable „max_allowed_packet“ festlegen.

Der obige Fehler tritt auf, weil die max_allowed_packet-Konfiguration der Datenbanktabelle nicht groß genug ist, da der Standardwert 4 M beträgt. Später habe ich ihn auf 100 M angepasst und es wurde kein Fehler gemeldet.

setze global max_allowed_packet = 100*1024*1024*

Denken Sie daran, dass Sie sich nach dem Einstellen erneut bei der Datenbank anmelden müssen, um den eingestellten Wert anzuzeigen

VARIABLEN anzeigen wie '%max_allowed_packet%'

Der Code lautet wie folgt:

Packungsbeilage;
importiere java.sql.Connection;
importiere java.sql.DriverManager;
importiere java.sql.SQLException;
importiere java.util.Date;
importiere com.mysql.jdbc.PreparedStatement;
öffentliche Klasse InsertTest {
   public static void main(String[] args) throws ClassNotFoundException, SQLException {
     endgültige String-URL = "jdbc:mysql://127.0.0.1/teacher"; 
     endgültiger String-Name = "com.mysql.jdbc.Driver"; 
     endgültiger String-Benutzer = "root"; 
     endgültiges String-Passwort = "123456"; 
     Verbindung conn = null; 
     Class.forName(name); //Verbindungstyp angeben conn = DriverManager.getConnection(url, user, password); //Verbindung abrufen if (conn!= null ) {
       System.out.println("Verbindung erfolgreich hergestellt");
       einfügen(conn);
     } anders {
       System.out.println("Verbindung konnte nicht hergestellt werden");
     }
   }
   öffentliche statische Leere einfügen (Verbindung conn) {
     // Startzeit Long begin = new Date().getTime();
     // SQL-Präfix String-Präfix = "INSERT INTO t_teacher (id,t_name,t_password,sex,description,pic_url,school_name,registrate,remark) VALUES ";
     versuchen {
       // SQL-Suffix speichern StringBuffer suffix = new StringBuffer();
       // Transaktion auf Nicht-Automatisches Commit setzen conn.setAutoCommit( false );
       // PST ist besser als ST PreparedStatement pst = (PreparedStatement) conn.prepareStatement( "" ); //Anweisung zur Ausführung vorbereiten// Äußere Schleife, Gesamtzahl der festgeschriebenen Transaktionen für (int i = 1; i <= 100; i++) {
         Suffix = neuer StringBuffer();
         // j-ter Übermittlungsschritt für (int j = 1; j <= 100000; j++) {
           // SQL-Suffix erstellen suffix.append( "('" + uutil.UUIDUtil.getUUID()+ "','" +i*j+ "','123456'" + ",'Männlich'" + ",'Lehrer'" + ",'www.bbk.com'" + ",'XX Universität'" + ",'" + "2016-08-12 14:43:26" + "','Hinweis'" + ")," );
         }
         // Vollständiges SQL erstellen
         Zeichenfolge SQL = Präfix + Suffix.Teilzeichenfolge (0, Suffix.Länge() – 1);
         //Ausführungs-SQL hinzufügen
         pst.addBatch(sql);
         // Operationen ausführen pst.executeBatch();
         // Transaktion festschreiben conn.commit();
         // Zuletzt hinzugefügte Daten löschen suffix = new StringBuffer();
       }
       //Erstklassige Verbindung pst.close();
       Verbindung schließen();
     } Fang (SQLException e) {
       e.printStackTrace();
     }
     // Endzeit Langes Ende = neues Date().getTime();
     // Zeitaufwendig System.out.println( "Zeit, die zum Einfügen von 10 Millionen Datensätzen benötigt wird: " + (end - begin) / 1000 + " s" );
     System.out.println("Einfügen abgeschlossen");
   }
}

Zusammenfassen

Oben ist die vom Editor eingeführte Operationsmethode, um 10 Millionen Daten in 88 Sekunden in die MySQL-Datenbanktabelle einzufügen. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor 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:
  • MySql schnelles Einfügen von zig Millionen großen Datenbeispielen
  • Beispielcode zum Einfügen von Millionen von Daten in MySQL mithilfe von JDBC in Java
  • So fügen Sie schnell Millionen von Testdaten in MySQL ein
  • Lernen Sie, wie Sie in 6 Sekunden 1 Million Datensätze in MySQL einfügen

<<:  ThingJS-Partikeleffekte, um Regen- und Schneeeffekte mit einem Klick zu erzielen

>>:  JavaScript-Offset implementiert die Erfassung der Mauskoordinaten und das Ziehen von Modulen innerhalb des Fensters

Artikel empfehlen

Detaillierte Schritte zum Konfigurieren von my.ini für mysql5.7 und höher

Im entpackten Paket von Windows 64-Bit MySQL 5.7 ...

Einige Probleme, die bei der Installation von MySQL auftreten können

Frage 1: Wenn Sie während der Installation „net s...

Detaillierte Erklärung der InnoDB-Speicherdateien in MySQL

Physisch gesehen besteht eine InnoDB-Tabelle aus ...

Häufige Fehler und Gründe für MySQL-Verbindungsfehler

=================================================...

Natives JS zur Implementierung eines atmenden Karussells

Heute zeige ich Ihnen ein mit nativem JS implemen...

XHTML 1.0-Referenz

Nach Funktion sortierenNN: Gibt an, welche frühere...

Schritte zum Kapseln der Karussellkomponente in vue3.0

Inhaltsverzeichnis 1: Kapselungsidee 2. Verpackun...

Ein zeitaufwändiger Fehlerbehebungsprozess für einen Docker-Fehler

Inhaltsverzeichnis Herkunft Umweltinformationen F...

Eine kurze Diskussion über die Fallstricke der React UseEffect-Abschließung

Problemcode Schauen Sie sich den Code eines durch...

So konvertieren Sie MySQL horizontal in vertikal und vertikal in horizontal

Daten initialisieren Tabelle löschen, wenn `test_...

Was ist ein MySQL-Index? Fragen Sie, wenn Sie es nicht verstehen

Inhaltsverzeichnis Überblick Vom Binärbaum zum B+...