Schnell mehrere Zeilen in Bulk mit MySQL einfügen

Lass uns in die Welt der Bulk-Dateninsertion in MySQL eintauchen. Stell dir vor, du bist ein Softwareentwickler, der eine brandneue Anwendung erstellt. Du hast ein fantastisches Feature, das auf einem riesigen Datensatz basiert. Aber bevor du es in der realen Welt launchen kannst, musst du testen, wie dein System mit großen Datenmengen umgeht.
Hier kommt die Bulk-Dateninsertion ins Spiel. Es ist wie eine turboaufgeladene Methode, um deine Datenbank schnell mit vielen Informationen zu füllen.
Du kannst reale Szenarien simulieren, indem du Tausende oder sogar Millionen von Datensätzen einfügst, um zu sehen, wie deine Datenbank und Anwendung unter Druck funktionieren.
Bulk-Inserts sind entscheidend für das Benchmarking der Leistung deiner Datenbank und Anwendung, da sie dir ermöglichen, verschiedene Konfigurationen zu vergleichen und für Geschwindigkeit zu optimieren.
Lass uns einige Beispiele für Szenarien betrachten, in denen du Bulk-Inserts für Tests verwenden könntest:
Du könntest einen Bulk-Insert verwenden, um Benutzer, Produkte, Bestellungen oder sogar Kundenbewertungen auf einmal in deine Datenbank hinzuzufügen. Das ist viel schneller, als jede Bestellung einzeln hinzuzufügen. So kannst du testen, wie deine Anwendung mit großen Datenmengen umgeht.
Du musst deine Datenbank mit einer großen Anzahl von Produkten füllen, um die Suchfunktionalität und Filterung zu testen.
Wenn du also mit einem System arbeitest, das große Datenmengen verarbeitet, sind Bulk-Inserts ein leistungsstarkes Werkzeug in deinem Werkzeugkasten.
Im nächsten Teil werden wir einige spezifische Beispiele erkunden, wie Bulk-Insertion verwendet werden kann, um deine Software zu testen.
Um 10.000 Zeilen Daten für deine wp_postmeta-Tabelle in einer einzelnen INSERT-Anweisung zu generieren:
INSERT INTO wp_postmeta (post_id, meta_key, meta_value) SELECT nums.n, CONCAT('Ten Thousand Key ', CAST(nums.n AS CHAR)), CONCAT('Ten Thousand Value ', CAST(nums.n AS CHAR)) FROM ( SELECT d1.N + d2.N * 10 + d3.N * 100 + d4.N * 1000 + 1 AS n FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d1 ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d2 ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d3 ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d4 ORDER BY n ) nums;
Lass es uns Schritt für Schritt aufschlüsseln:
Unterabfrage (
nums
): Diese Unterabfrage ist verantwortlich für die Generierung der Zahlenfolge.- Sie verwendet eine
SELECT
-Anweisung, um vier identische Unterabfragen (bezeichnet alsd1
,d2
,d3
undd4
) mitUNION ALL
zu kombinieren. - Jede Unterabfrage enthält die Zahlen 0 bis 9.
- Der Ausdruck
d1.N + d2.N * 10 + d3.N * 100 + d4.N * 1000 + 1 AS n
kombiniert die Werte aus den vier Unterabfragen, um eine Zahlenfolge von 1 bis 10.000 zu erstellen. ORDER BY n
stellt sicher, dass die Zahlen in aufsteigender Reihenfolge generiert werden.
- Sie verwendet eine
Hauptabfrage: Dies ist die
INSERT INTO
-Anweisung.- Sie verwendet die
SELECT
-Anweisung, um die einzufügenden Daten anzugeben. post_id
: Dienums.n
-Variable (die die generierten Zahlen enthält) wird direkt alspost_id
verwendet.meta_key
: Der AusdruckCONCAT('Zehntausend Schlüssel ', CAST(nums.n AS CHAR))
generiert einen eindeutigen Schlüssel für jede Zeile.meta_value
: Der AusdruckCONCAT('Zehntausend Wert ', CAST(nums.n AS CHAR))
erstellt einen eindeutigen Wert für jede Zeile.
- Sie verwendet die
Erzeugte Daten: Die Abfrage wird 10.000 Zeilen in die wp_postmeta
-Tabelle einfügen. Jede Zeile wird haben:
post_id
: Eine Zahl von 1 bis 10.000.meta_key
: Ein eindeutiger Schlüssel wie "Zehntausend Schlüssel 1", "Zehntausend Schlüssel 2" usw.meta_value
: Ein eindeutiger Wert wie "Zehntausend Wert 1", "Zehntausend Wert 2" usw.
Diese MySQL-Abfrage kann für zehntausend Zeileneinträge verwendet werden, aber für größere Dateneinträge ist es notwendig, den Ansatz zur Datengenerierung zu verbessern.
Die folgende MySQL-Abfrage ist eine clevere Möglichkeit, eine Million Zeilen Daten für deine wp_postmeta
-Tabelle mithilfe von benutzerdefinierten Variablen und einer Reihe von CROSS JOIN
-Operationen zu generieren.
INSERT INTO wp_postmeta (post_id, meta_key, meta_value) SELECT (@rn := @rn + 1) as rn, CONCAT('One Million Key ', CAST(@rn AS CHAR)), CONCAT('One Million Value ', CAST(@rn AS CHAR)) FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d1 CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d2 CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d3 CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d4 CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d5 CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d6 CROSS JOIN (SELECT @rn := 0) params
Lass uns diese erweiterte MySQL-Abfrage aufschlüsseln:
-
Benutzerdefinierte Variable (
@rn
):- Die Abfrage führt eine benutzerdefinierte Variable namens
@rn
ein. Diese Variable wird verwendet, um die Zeilennummer zu verfolgen, während wir Daten generieren. - Initialisierung: Die Variable wird im letzten
SELECT
-Statement auf 0 initialisiert:(SELECT @rn := 0) params
.
- Die Abfrage führt eine benutzerdefinierte Variable namens
-
CROSS JOIN
:- Die Abfrage verwendet sechs
CROSS JOIN
-Operationen, um eine große Anzahl von Zeilen zu generieren. - Jedes
CROSS JOIN
kombiniert die Ergebnisse zweier Tabellen. In diesem Fall verwenden wir sechs identische Unterabfragen (bezeichnet alsd1
bisd6
), die die Zahlen 0 bis 9 enthalten. - Jedes
CROSS JOIN
multipliziert die Anzahl der Zeilen mit 10. Da wir sechsCROSS JOIN
-Operationen haben, ist die Gesamtzahl der generierten Zeilen 10 * 10 * 10 * 10 * 10 * 10 = 1.000.000.
- Die Abfrage verwendet sechs
-
SELECT
-Anweisung:- Die
SELECT
-Anweisung ruft die folgenden Daten für jede Zeile ab:(@rn := @rn + 1) as rn
: Dieser Ausdruck erhöht die Variable@rn
für jede Zeile um 1, wodurch effektiv eine Zeilennummer erstellt wird. Die Klauselas rn
gibt der generierten Zeilennummer den Aliasrn
.CONCAT('Eine Million Schlüssel ', CAST(@rn AS CHAR))
: Dieser Ausdruck generiert einen eindeutigen Schlüssel für jede Zeile. Er kombiniert die Zeichenkette "Eine Million Schlüssel " mit der aktuellen Zeilennummer (@rn
), die in ein Zeichen konvertiert wurde.CONCAT('Eine Million Wert ', CAST(@rn AS CHAR))
: Dieser Ausdruck generiert einen eindeutigen Wert für jede Zeile. Er kombiniert die Zeichenkette "Eine Million Wert " mit der aktuellen Zeilennummer (@rn
), die in ein Zeichen konvertiert wurde.
- Die
Erzeugte Daten:
- Die Abfrage wird eine Million Zeilen in die Tabelle
wp_postmeta
einfügen. Jede Zeile wird Folgendes haben:post_id
: Eine Zeilennummer von 1 bis 1.000.000.meta_key
: Ein eindeutiger Schlüssel wie "Eine Million Schlüssel 1", "Eine Million Schlüssel 2" usw.meta_value
: Ein eindeutiger Wert wie "Eine Million Wert 1", "Eine Million Wert 2" usw.
Wichtige Punkte:
- Benutzerdefinierte Variablen sind leistungsstarke Werkzeuge zur Datenmanipulation innerhalb einer Abfrage.
CROSS JOIN
ist eine großartige Möglichkeit, eine große Anzahl von Zeilen zu generieren, indem mehrere Tabellen oder Unterabfragen kombiniert werden.- Diese Methode ist effizienter als die Verwendung verschachtelter
UNION ALL
-Operationen zur Generierung einer großen Anzahl von Zeilen.
Diese Abfrage demonstriert einen cleveren und effizienten Ansatz zur Generierung einer riesigen Menge an Testdaten für deine Datenbank.
Keywords: Bulk Insert MySQL,MySQL Großdaten-Einfügung,Mehrere Zeilen einfügen MySQL,MySQL Bulk Insert Best Practices,Testdaten generieren MySQL,MySQL viele Zeilen effizient einfügen,CROSS JOIN MySQL für Datengenerierung,Bulk Insert Beispiele MySQL,Batch Insert in MySQL,MySQL Datengenerierungstechniken