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:
|
<<: WeChat-Applet zur automatischen Videowiedergabe imitiert Beispiel eines GIF-Animationseffekts
>>: Awk-Befehlszeile oder Skript, das Ihnen beim Sortieren von Textdateien hilft (empfohlen)
html ¶ <html></html> html:xml ¶ <h...
Dockerfile ist eine Datei, die zum Erstellen eine...
Inhaltsverzeichnis Klicken Sie zunächst auf das E...
Methode 1: Verwenden Sie die erweiterte Suche von...
Inhaltsverzeichnis Hintergrund 1. Gedankenanalyse...
Heute habe ich einem Klassenkameraden geholfen, e...
<br />Wir haben in unseren Artikeln bei jb51...
Inhaltsverzeichnis 1. Übersicht 2. Laden Sie das ...
Inhaltsverzeichnis 1. Übersicht 2. Attribute 1. M...
1. Spiegelbilder verschwinden in 50 und 93 [root@...
MySQL UTF-8-Kodierung MySQL unterstützt UTF-8 sei...
Inhaltsverzeichnis 1. Was ist ein Prototyp? 1.1 F...
Inhaltsverzeichnis 1. Datenbankbetrieb 2. Datenty...
Häufig verwendete Anzeigebefehle für MySQL 1. Zei...
Der Komponentenlebenszyklus ist normalerweise der...