Manchmal müssen Sie basierend auf der offiziell von MySQL bereitgestellten Testbibliothek Testdaten erstellen und Hunderttausende, Millionen oder Zehnmillionen Daten einfügen. Dies geschieht mithilfe einiger Funktionen und gespeicherter Prozeduren. Offizielle Adresse der Testbibliothek: https://github.com/datacharmer/test_db Wir haben die offizielle Datenbank importiert und einige Vereinfachungen vorgenommen, wobei drei Tabellen übrig blieben: Abteilungstabelle, Mitarbeitertabelle und Beschäftigungstabelle, und Fremdschlüsselassoziationen entfernt. Da es sich um Testdaten handelt, ist die Übereinstimmung zwischen den Daten nicht genau. Notwendige Funktionen Generieren Sie eine zufällige Zeichenfolge RAND(): Erzeugt eine Zufallszahl zwischen 0 und 1 FLOOR: Abwärts gerichtete Ganzzahl (FLOOR(1.2)=1) CEILING rundet auf (CEILING(1.2)=2) Teilzeichenfolge: Zeichenfolge abfangen concat: Zeichenkettenverkettung CREATE DEFINER=`root`@`localhost` FUNCTION `rand_string`(n INT) RETURNS varchar(255) CHARSET latin1 BEGINNEN DECLARE chars_str varchar(100) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; DECLARE return_str varchar(255) DEFAULT ''; DECLARE i INT DEFAULT 0; WÄHREND ich < n DO SET return_str = concat(return_str,substring(chars_str,FLOOR(1 + RAND()*62),1)); Setze i = i +1; ENDE WÄHREND; RETURN return_str; ENDE Alle benutzerdefinierten Funktionen anzeigen Funktionsstatus anzeigen Testeinsatz: wähle rand_string(5); Generieren Sie eine zufällige Zeichenfolge für Jahr, Monat und Tag Generieren Sie ein zufälliges Datum innerhalb eines bestimmten Zeitraums WÄHLEN Datum( from_unixtime( unix_timestamp( '2000-01-01' ) + floor( rand() * ( unix_timestamp( '2020-12-31' ) - unix_timestamp( '2000-01-01' ) + 1 ) ) )); Funktion: Generierung eines zufälligen Datums innerhalb eines bestimmten Zeitraums CREATE DEFINER=`root`@`localhost` FUNCTION `rand_date_string`(startDate varchar(255),endDate varchar(255)) RETURNS varchar(255) CHARSET latin1 BEGINNEN DECLARE return_str varchar(255) DEFAULT ''; SET return_str =Datum( von_unixzeit( unix_zeitstempel( startdatum ) + floor( rand() * ( unix_timestamp( Enddatum ) - unix_timestamp( Startdatum ) + 1 ) ) ) ); RETURN return_str; ENDE Testeinsatz: Wählen Sie rand_date_string('2000-01-01','2020-12-31'); //Ergebnis 10.09.2001 Gespeicherte Prozedur generiert Daten Wenn in jede Abteilung eine Million Mitarbeiter eingetragen werden, enthält die Mitarbeitertabelle neun Millionen Datensätze. CREATE DEFINER=`root`@`localhost` VERFAHREN `data`() BEGINNEN DECLARE i INT DEFAULT 1; DECLARE j INT DEFAULT 0; DECLARE-ID INT DEFAULT 0; WÄHREND i < 10 DO WÄHREND j < 1000000 DO insert into employees_m (Mitarbeiternummer, Geburtsdatum, Vorname, Nachname, Geschlecht, Einstellungsdatum) VALUES( id,rand_date_string('1970-01-01','1997-01-01'),rand_string(5),rand_string(5),'M',JETZT()); in dept_emp_m einfügen (emp_no,dept_no,from_date,to_date) Werte( id, concat('d00', i), Randdatum_Zeichenfolge('1990-01-01','2020-12-31'),'2020-12-31'); Setze j = j + 1; SETZEN Sie die ID = ID + 1; ENDE WÄHREND; Setze j = 0; Setze i = i + 1; ENDE WÄHREND; ENDE Ungefähre Zeit zum Einfügen von 9 Millionen Datensätzen: 4868 s Die obige Methode zum Einfügen von Daten ist sehr langsam. Sie können Daten in eine Speichertabelle einfügen, d. h. die Speicher-Engine der Tabelle in MEMORY ändern. Auf diese Weise wird der Speicher zum Speichern von Daten verwendet, was viel schneller ist, als sie direkt mit der INNODB-Engine in eine Tabelle einzufügen. Es gibt nur keine Persistenz, aber die Geschwindigkeit ist sehr hoch. Das Einfügen von 10 Millionen Daten dauert etwa 1227,89 s. Anhang Ändern der Tabellenspeicher-Engine ALTER TABLE dept_emp_m ENGINE=MEMORY; Passen Sie die Größe der Speichertabelle an und ändern Sie die Konfigurationsdatei [mysqld] maximale Heap-Tabellengröße = 2048 MB temporäre Tabellengröße = 2048 M Oben finden Sie Einzelheiten zum Erstellen einer Testbibliothek mit zig Millionen Testdaten in MySQL. Weitere Informationen zu zig Millionen Testdaten in MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
>>: So implementieren Sie einen einfachen HTML-Videoplayer
Inhaltsverzeichnis 1. untergeordneter Prozess 2. ...
Ich bin kürzlich bei der Arbeit auf ein Problem g...
Hintergrund Bei der Replikation handelt es sich u...
Als ich kürzlich Hausaufgaben machte, musste ich e...
In letzter Zeit wurde viel über H1 diskutiert (auf...
Lassen Sie uns zunächst einige wichtige Punkte zu...
In horizontaler Richtung können Sie die Ausrichtu...
Erstellen eines Ordners Verzeichnisstruktur: daba...
Schauen wir uns den Panorama-Effekt an: Adresse a...
Einführung Die Docker-Community hat viele Open-So...
Netzfilter Netfilter ist ein Paketverarbeitungsmo...
Anpassen eines Demo-Befehls Die Syntax der benutz...
Inhaltsverzeichnis 1. Constraint-Konzepte und Kla...
1. Öffnen Sie die virtuelle CentOS 7-Maschine. 2....
Bei Ubuntu 20.04 ist die Root-Anmeldung standardm...