Beispiele für 4 Methoden zum Einfügen großer Datenmengen in MySQL

Beispiele für 4 Methoden zum Einfügen großer Datenmengen in MySQL

Vorwort

Dieser Artikel stellt hauptsächlich 4 Methoden zum Einfügen großer Datenmengen in MySQL vor und teilt sie zu Ihrer Information und zum Lernen. Werfen wir einen Blick auf die ausführliche Einführung.

Methode 1: Schleifeneinfügung

Dies ist auch die gebräuchlichste Methode. Wenn die Datenmenge nicht groß ist, kann sie verwendet werden, es werden jedoch bei jedem Herstellen einer Verbindung zur Datenbank Ressourcen verbraucht.

Die allgemeine Idee ist wie folgt

(Ich schreibe hier Pseudocode, und der spezifische Schreibstil kann mit Ihrer eigenen Geschäftslogik oder Framework-Syntax kombiniert werden.)

für($i=1;$i<=100;$i++){
 $sql = 'einfügen...............';
 //AbfrageSQL
}
foreach($arr als $Schlüssel => $Wert){
$sql = 'einfügen...............';
 //AbfrageSQL
}
während($i <= 100){
$sql = 'einfügen...............';
 //AbfrageSQL
 $i++
}

Da es zu häufig vorkommt und nicht schwierig ist und es nicht das ist, worüber ich heute hauptsächlich schreibe, werde ich hier nicht mehr dazu sagen.

Methode 2: Verbindungsressourcen reduzieren und eine SQL-Anweisung einfügen

Der Pseudocode lautet wie folgt

//Hier nehmen wir an, dass der Schlüssel von arr mit dem Datenbankfeld synchronisiert ist. Tatsächlich verwenden die meisten Frameworks dieses Design beim Betrieb der Datenbank in PHP. $arr_keys = array_keys($arr);
$sql = 'INSERT INTO Tabellenname (' . implode(',' ,$arr_keys) . ') Werte';
$arr_values ​​​​= array_values($arr);
$sql .= " ('" . implode("','" ,$arr_values) . "'),";
$sql = substr($sql,0,-1);
//Nach dem Spleißen handelt es sich wahrscheinlich um INSERT INTO tablename ('username','password')-Werte 
('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx')
.......
//AbfrageSQL

Diese Schreibweise stellt grundsätzlich kein Problem dar, wenn 10.000 Datensätze normal eingefügt werden, es sei denn, die Daten sind sehr lang. Sie reicht aus, um normale Stapeleinfügungen zu handhaben, wie z. B.: Stapelgenerierung von Kartennummern, Stapelgenerierung von Zufallscodes usw. . .

Methode 3: Verwenden gespeicherter Prozeduren

Ich habe das in der Hand und stelle das SQL zur Verfügung. Die spezifische Geschäftslogik können Sie selbst kombinieren.

Trennzeichen $$$
Prozedur zqtest() erstellen
beginnen
deklariere i als int default 0;
setze i=0;
Transaktion starten;
während i<80000
 //Ihr Insert-SQL 
setze i=i+1;
Ende während;
begehen;
Ende
$$$
Trennzeichen;
rufen Sie zqtest() auf;

Dies ist nur ein Testcode. Sie können die spezifischen Parameter selbst definieren.

Ich füge 80.000 Datensätze auf einmal ein. Das ist zwar nicht viel, aber jeder Datensatz enthält eine große Datenmenge und es gibt viele varchar4000- und Textfelder. Es dauert 6,524 Sekunden.

Methode 4: Verwenden Sie MYSQL LOCAL_INFILE

Ich verwende dies derzeit, also habe ich den PDO-Code hier zu Ihrer Information kopiert

//pdo so einstellen, dass MYSQL_ATTR_LOCAL_INFILE aktiviert wird
/*[email protected]
öffentliche Funktion pdo_local_info ()
{
  global $system_dbserver;
  $dbname = "[email protected]";
  $ip = "[email protected]";
  $Benutzer = '[email protected]';
  $pwd = '[email protected]';
  $dsn = 'mysql:dbname=' . $dbname . ';host=' . $ip . ';port=3306';
  $options = [PDO::MYSQL_ATTR_LOCAL_INFILE => true];
  $db = neues PDO($dsn,$user,$pwd,$options);
  $db zurückgeben;
 }
//Der Pseudocode lautet wie folgt: public function test(){
  : $arr_keys = array_keys($arr);
  $root_dir = $_SERVER["DOCUMENT_ROOT"] . '/';
  $my_file = $root_dir . "[email protected]/sql_cache/" . $order['Bestellnummer'] . '.sql';
  $fhandler = fopen($meine_datei,'a+');
  wenn ($fhandler) {
  $sql = implodieren("\t", $arr);
   $i = 1;
   während ($i <= 80000)
   {
    $i++;
    fwrite($fhandler ,$sql . "\r\n");
   }
   $sql = "DATEN LOKAL INFILE LADEN '" . $myFile . "' IN TABELLE ";
   $sql .= "Tabellenname (" . implode(',' ,$arr_keys) . ")";
   : Wenn Sie eine Verbindung zu einem Server herstellen, der eine Verbindung zum Server herstellt, müssen Sie die folgenden Schritte ausführen:
   $res = $pdo->exec($sql);
   wenn (!$res) {
    //TODO-Einfügen fehlgeschlagen}
   @unlink($meine_datei);
  }
}

Dies hat auch eine große Menge an Daten, mit vielen varchar4000- und Textfeldern.

Dauer: 2.160s

Das Obige erfüllt die grundlegenden Anforderungen. Eine Million Datenpunkte sind kein großes Problem. Andernfalls kann es sein, dass bei zu großen Datenmengen die Datenbank und Tabellen aufgeteilt oder Warteschlangen zum Einfügen verwendet werden müssen.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • 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
  • Detaillierter Beispielcode einer MySQL-Batch-Einfügeschleife
  • 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

<<:  WeChat-Applet zur automatischen Videowiedergabe imitiert Beispiel eines GIF-Animationseffekts

>>:  Awk-Befehlszeile oder Skript, das Ihnen beim Sortieren von Textdateien hilft (empfohlen)

Artikel empfehlen

Automatisierte Schnittstellentests mit Postman

Inhaltsverzeichnis Hintergrundbeschreibung Erstel...

Fassen Sie einige häufige Rankingprobleme in MySQL zusammen

Vorwort: In manchen Anwendungsszenarien stoßen wi...

Warum MySQL das Löschen von Daten nicht empfiehlt

Inhaltsverzeichnis Vorwort InnoDB-Speicherarchite...

JavaScript zum Erzielen eines einfachen Karusselleffekts

Was ist ein Karussell? Karussell: In einem Modul ...

Mysql setzt Boolesche Typoperationen

Mysql legt den Booleschen Typ fest 1. Tinyint-Typ...

Detaillierte Erklärung der Semiotik in Html/CSS

Basierend auf Theorien wie Saussures Sprachphilos...

Beispielcode zur Implementierung eines gepunkteten Rahmen-Scrolleffekts mit CSS

Wir sehen oft einen coolen Effekt, wenn die Maus ...

Vergleich der Vorteile von vue3 und vue2

Inhaltsverzeichnis Vorteil 1: Optimierung des Dif...