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
Die unbedeutende flex-basis hat bei der kleinen F...
Vorwort Excel ist leistungsstark und weit verbrei...
Ich möchte kürzlich einen Docker für Cron-geplant...
Inhaltsverzeichnis Vorwort Schritt 1: Aufbau und ...
<br />Wählen Sie das praktischste Thema aus....
Logpoint-basierte Replikation 1. Erstellen Sie ei...
Wenn wir Frontend-Entwicklung betreiben, werden w...
MySQL Maximale Anzahl von Verbindungen anzeigen u...
Frage: Ich habe in Vue ein Formular zum Hochladen...
Beim Erstellen einer Homepage, beispielsweise ein...
Schöner Code ist die Grundlage einer schönen Websi...
Hintergrundinformationen Ich habe kürzlich einige...
In diesem Artikel wird die MySQL-Vorkompilierungs...
1|0MySQL (MariaDB) 1|11. Beschreibung Das Datenba...
Zum Ausführen von Docker sind Root-Rechte erforde...