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

Vue implementiert eine einfache Notizblockfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Zusammenfassung verschiedener Methoden für Vue zum Erreichen dynamischer Stile

Inhaltsverzeichnis 1. Ternäres Operatorurteil 2. ...

Mysql Workbench - Abfragemethode für MySQL-Datenbanken

Mysql Workbench ist ein Open-Source-Datenbankclie...

Docker-Installation von MySQL (8 und 5.7)

In diesem Artikel wird die Verwendung von Docker ...

JS erzielt Fünf-Sterne-Lobeffekt

Verwenden Sie JS, um objektorientierte Methoden z...

Grundlegende Kenntnisse zum MySQL UNION-Operator

MySQL UNION-Operator Dieses Tutorial stellt die S...

CentOS 7-Methode zum Ändern des Gateways und Konfigurieren des IP-Beispiels

Wählen Sie bei der Installation der CentOS7-Versi...

Erläuterung der Ausführungspriorität von mySQL-Schlüsselwörtern

Wie unten dargestellt: aus Tabelle wobei Bedingun...

Lösung zum Vergessen des MySQL-Passworts unter Linux

Das Problem ist folgendes: Ich habe den Befehl my...

Installationstutorial auf Unternehmensebene unter Verwendung des LAMP-Quellcodes

Inhaltsverzeichnis LAMP-Architektur 1.Lampeneinfü...

30 kostenlose hochwertige englische Ribbon-Schriftarten

30 kostenlose englische Ribbon-Schriftarten in hoh...

Index in MySQL

Vorwort Kommen wir gleich zur Sache. Die folgende...

Detaillierte Erklärung zur Verwendung von Scoped Slots in Vue.js-Slots

Inhaltsverzeichnis Keine Slots Vue2.x-Steckplätze...