Schnell mehrere Zeilen in Bulk mit MySQL einfügen

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 als d1, d2, d3 und d4) mit UNION 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.
  • Hauptabfrage: Dies ist die INSERT INTO-Anweisung.

    • Sie verwendet die SELECT-Anweisung, um die einzufügenden Daten anzugeben.
    • post_id: Die nums.n-Variable (die die generierten Zahlen enthält) wird direkt als post_id verwendet.
    • meta_key: Der Ausdruck CONCAT('Zehntausend Schlüssel ', CAST(nums.n AS CHAR)) generiert einen eindeutigen Schlüssel für jede Zeile.
    • meta_value: Der Ausdruck CONCAT('Zehntausend Wert ', CAST(nums.n AS CHAR)) erstellt einen eindeutigen Wert für jede Zeile.

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.
  • 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 als d1 bis d6), die die Zahlen 0 bis 9 enthalten.
    • Jedes CROSS JOIN multipliziert die Anzahl der Zeilen mit 10. Da wir sechs CROSS JOIN-Operationen haben, ist die Gesamtzahl der generierten Zeilen 10 * 10 * 10 * 10 * 10 * 10 = 1.000.000.
  • 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 Klausel as rn gibt der generierten Zeilennummer den Alias rn.
      • 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.

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
Nächster BeitragVorherigen Post
Kein Kommentar
    Kommentar hinzufügen
    comment url