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

So erstellen Sie ein Tomcat-Image basierend auf Dockerfile

Dockerfile ist eine Datei, die zum Erstellen eine...

Erläuterung synthetischer React-Ereignisse

Inhaltsverzeichnis Klicken Sie zunächst auf das E...

So finden Sie Websites mit SQL-Injection (unbedingt lesen)

Methode 1: Verwenden Sie die erweiterte Suche von...

HTML+CSS+JS zur Implementierung des Spiels „Nicht auf das Whiteboard treten“

Inhaltsverzeichnis Hintergrund 1. Gedankenanalyse...

Lösen Sie schnell das Problem des langsamen Tomcat-Starts, super einfach

Heute habe ich einem Klassenkameraden geholfen, e...

Erfahren Sie, wie Sie Nginx schnell in CentOS7 installieren

Inhaltsverzeichnis 1. Übersicht 2. Laden Sie das ...

Lösen Sie das Problem verschwindender Docker-Images

1. Spiegelbilder verschwinden in 50 und 93 [root@...

Warum wird in MySQL keine UTF-8-Kodierung verwendet?

MySQL UTF-8-Kodierung MySQL unterstützt UTF-8 sei...

Verstehen Sie die Grundlagen von Navicat für MySQL in einem Artikel

Inhaltsverzeichnis 1. Datenbankbetrieb 2. Datenty...

Detaillierte Erklärung der MySQL-Syntax, Sonderzeichen und regulären Ausdrücke

Häufig verwendete Anzeigebefehle für MySQL 1. Zei...

Eine Aufzeichnung der Fallstricke des Lebenszyklus von WeChat-Applet-Komponenten

Der Komponentenlebenszyklus ist normalerweise der...