Bemerkung: Die Datenmenge in diesem Artikel beträgt 1 Million. Wenn Sie zig Millionen Daten haben möchten, erhöhen Sie einfach die Menge. Verwenden Sie jedoch nicht zu viele rand() oder uuid(), da dies zu Leistungseinbußen führt. Hintergrund Wenn wir Leistungstests oder SQL-Optimierungen von Abfragevorgängen durchführen, müssen wir für unsere Tests häufig eine große Menge grundlegender Daten in einer Offline-Umgebung erstellen, um die reale Online-Umgebung zu simulieren. Unsinn, Sie können mich das nicht online testen lassen, sonst werde ich vom DBA getötet. So erstellen Sie Testdaten 1. Schreiben Sie Code und fügen Sie Bibliotheken stapelweise über den Code ein (ich habe es verwendet, die Schritte sind zu umständlich, die Leistung ist nicht hoch und es wird nicht empfohlen). 2. Gespeicherte Prozeduren schreiben und Funktionen ausführen (Implementierungsmethode 1 in diesem Artikel) 3. Im temporären Datentabellenmodus ausführen (dieser Artikel implementiert Modus 2, der dringend empfohlen wird. Er ist sehr einfach und das Einfügen der Daten geht schnell. Für 100-W-Daten dauert es nur wenige Sekunden.) 4. Zeile für Zeile manuell einfügen (WTF, geh zur Hölle) Erstellen der grundlegenden Tabellenstruktur Unabhängig davon, welche Methode ich verwende, muss ich die Tabelle erstellen, in die ich einfügen möchte. Tabelle „t_user“ erstellen ( `id` int(11) NICHT NULL AUTO_INCREMENT, `c_user_id` varchar(36) NICHT NULL STANDARD '', `c_name` varchar(22) NICHT NULL STANDARD '', `c_province_id` int(11) NICHT NULL, `c_city_id` int(11) NICHT NULL, `create_time` datetime NICHT NULL, Primärschlüssel (`id`), SCHLÜSSEL `idx_user_id` (`c_user_id`) )ENGINE=InnoDB STANDARD-CHARSET=utf8mb4; Methode 1: Verwenden gespeicherter Prozeduren und Speichertabellen Erstellen einer Speichertabelle Wir nutzen die schnelle Einfügegeschwindigkeit der MySQL-Speichertabelle, verwenden zunächst Funktionen und gespeicherte Prozeduren, um Daten in der Speichertabelle zu generieren, und fügen sie dann aus der Speichertabelle in die normale Tabelle ein Tabelle „t_user_memory“ erstellen ( `id` int(11) NICHT NULL AUTO_INCREMENT, `c_user_id` varchar(36) NICHT NULL STANDARD '', `c_name` varchar(22) NICHT NULL STANDARD '', `c_province_id` int(11) NICHT NULL, `c_city_id` int(11) NICHT NULL, `create_time` datetime NICHT NULL, Primärschlüssel (`id`), SCHLÜSSEL `idx_user_id` (`c_user_id`) )ENGINE=SPEICHER STANDARD-CHARSET=utf8mb4; Erstellen von Funktionen und gespeicherten Prozeduren # Erstellen Sie eine Funktion, die eine zufällige Zeichenfolge und eine zufällige Zeit erstellt mysql> Trennzeichen $$ mysql> CREATE DEFINER=`root`@`%` FUNCTION `randStr`(n INT) RETURNS varchar(255) CHARSET utf8mb4 -> DETERMINISTISCH -> BEGIN -> DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; -> 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; -> ZURÜCK return_str; -> ENDE$$ Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> CREATE DEFINER=`root`@`%` FUNCTION `randDataTime`(sd DATETIME,ed DATETIME) GIBT datetime ZURÜCK -> DETERMINISTISCH -> BEGIN -> DECLARE sub INT DEFAULT 0; -> DECLARE ret DATETIME; -> SET sub = ABS(UNIX_TIMESTAMP(ed)-UNIX_TIMESTAMP(sd)); -> SET ret = DATE_ADD(sd,INTERVAL FLOOR(1+RAND()*(sub-1)) SECOND); -> ZURÜCK ret; -> ENDE $$ mysql> Trennzeichen; # Erstellen Sie eine Prozedur zum Einfügen von Daten in den Datenspeicher mysql> CREATE DEFINER=`root`@`%` PROCEDURE `add_t_user_memory`(IN n int) -> BEGIN -> DECLARE i INT DEFAULT 1; -> WÄHREND (i <= n) TUN -> INSERT INTO t_user_memory (c_user_id, c_name, c_province_id, c_city_id, Erstellungszeit) VALUES (uuid(), randStr(20), FLOOR(RAND() * 1000), FLOOR(RAND() * 100), NOW()); -> SETZE i = i + 1; -> ENDE WÄHREND; -> ENDE -> $$ Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) Aufrufen einer gespeicherten Prozedur mysql> RUFEN SIE add_t_user_memory(1000000) an; FEHLER 1114 (HY000): Die Tabelle 't_user_memory' ist voll Wenn der Speicher voll ist, ändern Sie den Parameter max_heap_table_size. Ich habe 64 MB Speicher verwendet und 22 W Daten eingefügt. Ändern Sie ihn je nach Situation, aber der Wert sollte nicht zu groß sein. Der Standardwert von 32 MB oder 64 MB ist in Ordnung. Versuchen Sie es nicht in einer Produktionsumgebung. Einfügen aus der Speichertabelle in die normale Tabelle mysql> INSERT INTO t_user SELECT * FROM t_user_memory; Abfrage OK, 218953 Zeilen betroffen (1,70 Sek.) Datensätze: 218953 Duplikate: 0 Warnungen: 0 Methode 2: Verwenden einer temporären Tabelle Erstellen Sie eine temporäre Datentabelle tmp_table TABELLE ERSTELLEN tmp_table ( Ich würde INT, PRIMÄRSCHLÜSSEL (id) ); Verwenden Sie Python oder Bash, um eine Datendatei mit 1 Million Datensätzen zu generieren (Python generiert sie sofort).
Daten in die temporäre Tabelle tmp_table importieren mysql> Daten in Datei „/Users/LJTjintao/temp/base.txt“ laden und in Tabelle tmp_table ersetzen; Abfrage OK, 1.000.000 Zeilen betroffen (2,55 Sek.) Datensätze: 1000000 Gelöscht: 0 Übersprungen: 0 Warnungen: 0 In 20 Sekunden können zig Millionen Daten eingefügt werden Hinweis: Beim Importieren von Daten kann ein Fehler auftreten, da secure_file_priv in MySQL standardmäßig nicht aktiviert ist (dieser Parameter wird verwendet, um die Auswirkungen von Datenimport- und -exportvorgängen, wie z. B. das Ausführen von LOAD DATA-, SELECT ... INTO OUTFILE-Anweisungen und LOAD_FILE()-Funktionen, zu begrenzen. Für diese Vorgänge muss der Benutzer über das FILE-Privileg verfügen.) Lösung: Fügen Sie Verwenden Sie die temporäre Tabelle als Basisdaten und fügen Sie Daten in t_user ein. Das Einfügen von 1 Million Daten dauert 10,37 Sekunden. mysql> INSERT INTO t_user -> AUSWÄHLEN -> Ich würde, ->uuid(), -> CONCAT('BenutzerSpitzname', id), -> FLOOR(Rand() * 1000), -> FLOOR(Rand() * 100), -> JETZT() -> VON -> temporäre Tabelle; Abfrage OK, 1.000.000 Zeilen betroffen (10,37 Sek.) Datensätze: 1000000 Duplikate: 0 Warnungen: 0 Aktualisieren Sie das Feld „Erstellungszeit“, um die Erstellungszeit der eingefügten Daten zufälliger zu gestalten. UPDATE t_user SET create_time=date_add(create_time, Intervall FLOOR(1 + (RAND() * 7)) Jahr); Abfrage OK, 1.000.000 Zeilen betroffen (5,21 Sek.) Übereinstimmende Zeilen: 1000000 Geändert: 1000000 Warnungen: 0 mysql> UPDATE t_user SET create_time=date_add(create_time, Intervall FLOOR(1 + (RAND() * 7)) Jahr); Abfrage OK, 1.000.000 Zeilen betroffen (4,77 Sek.) Übereinstimmende Zeilen: 1000000 Geändert: 1000000 Warnungen: 0 mysql> wähle * ab t_user-Limit 30; +----+--------------------------------------+----------------+-----------+--------------+---------------------+ | ID | c_Benutzer-ID | c_Name | c_Provinz-ID | c_Stadt-ID | Erstellungszeit | +----+--------------------------------------+----------------+-----------+--------------+---------------------+ | 1 | bf5e227a-7b84-11e9-9d6e-751d319e85c2 | userNickName1 | 84 | 64 | 13.11.2015 21:13:19 | | 2 | bf5e26f8-7b84-11e9-9d6e-751d319e85c2 | userNickName2 | 967 | 90 | 13.11.2019 20:19:33 | | 3 | bf5e2810-7b84-11e9-9d6e-751d319e85c2 | userNickName3 | 623 | 40 | 13.11.2014 20:57:46 | | 4 | bf5e2888-7b84-11e9-9d6e-751d319e85c2 | userNickName4 | 140 | 49 | 13.11.2016 20:50:11 | | 5 | bf5e28f6-7b84-11e9-9d6e-751d319e85c2 | userNickName5 | 47 | 75 | 13.11.2016 21:17:38 | | 6 | bf5e295a-7b84-11e9-9d6e-751d319e85c2 | userNickName6 | 642 | 94 | 13.11.2015 20:57:36 | | 7 | bf5e29be-7b84-11e9-9d6e-751d319e85c2 | userNickName7 | 780 | 7 | 13.11.2015 20:55:07 | | 8 | bf5e2a4a-7b84-11e9-9d6e-751d319e85c2 | userNickName8 | 39 | 96 | 13.11.2017 21:42:46 | | 9 | bf5e2b58-7b84-11e9-9d6e-751d319e85c2 | userNickName9 | 731 | 74 | 13.11.2015 22:48:30 | | 10 | bf5e2bb2-7b84-11e9-9d6e-751d319e85c2 | userNickName10 | 534 | 43 | 13.11.2016 22:54:10 | | 11 | bf5e2c16-7b84-11e9-9d6e-751d319e85c2 | userNickName11 | 572 | 55 | 13.11.2018 20:05:19 | | 12 | bf5e2c70-7b84-11e9-9d6e-751d319e85c2 | userNickName12 | 71 | 68 | 13.11.2014 20:44:04 | | 13 | bf5e2cca-7b84-11e9-9d6e-751d319e85c2 | userNickName13 | 204 | 97 | 13.11.2019 20:24:23 | | 14 | bf5e2d2e-7b84-11e9-9d6e-751d319e85c2 | userNickName14 | 249 | 32 | 13.11.2019 22:49:43 | | 15 | bf5e2d88-7b84-11e9-9d6e-751d319e85c2 | userNickName15 | 900 | 51 | 13.11.2019 20:55:26 | | 16 | bf5e2dec-7b84-11e9-9d6e-751d319e85c2 | userNickName16 | 854 | 74 | 13.11.2018 22:07:58 | | 17 | bf5e2e50-7b84-11e9-9d6e-751d319e85c2 | userNickName17 | 136 | 46 | 13.11.2013 21:53:34 | | 18 | bf5e2eb4-7b84-11e9-9d6e-751d319e85c2 | userNickName18 | 897 | 10 | 13.11.2018 20:03:55 | | 19 | bf5e2f0e-7b84-11e9-9d6e-751d319e85c2 | userNickName19 | 829 | 83 | 13.11.2013 20:38:54 | | 20 | bf5e2f68-7b84-11e9-9d6e-751d319e85c2 | userNickName20 | 683 | 91 | 13.11.2019 20:02:42 | | 21 | bf5e2fcc-7b84-11e9-9d6e-751d319e85c2 | userNickName21 | 511 | 81 | 13.11.2013 21:16:48 | | 22 | bf5e3026-7b84-11e9-9d6e-751d319e85c2 | userNickName22 | 562 | 35 | 13.11.2019 20:15:52 | | 23 | bf5e3080-7b84-11e9-9d6e-751d319e85c2 | userNickName23 | 91 | 39 | 13.11.2016 20:28:59 | | 24 | bf5e30da-7b84-11e9-9d6e-751d319e85c2 | userNickName24 | 677 | 21 | 13.11.2016 21:37:15 | | 25 | bf5e3134-7b84-11e9-9d6e-751d319e85c2 | userNickName25 | 50 | 60 | 13.11.2018 20:39:20 | | 26 | bf5e318e-7b84-11e9-9d6e-751d319e85c2 | userNickName26 | 856 | 47 | 13.11.2018 21:24:53 | | 27 | bf5e31e8-7b84-11e9-9d6e-751d319e85c2 | userNickName27 | 816 | 65 | 13.11.2014 22:06:26 | | 28 | bf5e324c-7b84-11e9-9d6e-751d319e85c2 | userNickName28 | 806 | 7 | 13.11.2019 20:17:30 | | 29 | bf5e32a6-7b84-11e9-9d6e-751d319e85c2 | userNickName29 | 973 | 63 | 13.11.2014 21:08:09 | | 30 | bf5e3300-7b84-11e9-9d6e-751d319e85c2 | userNickName30 | 237 | 29 | 13.11.2018 21:48:17 | +----+--------------------------------------+----------------+-----------+--------------+---------------------+ 30 Zeilen im Satz (0,01 Sek.) 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:
|
<<: Detaillierte Erklärung zur Verwendung der Linux-lseek-Funktion
>>: Bringen Sie Ihnen Schritt für Schritt bei, wie Sie mit vue3 ein Brick-Breaking-Spiel entwickeln
Inhaltsverzeichnis Vorwort 1. Lokale Portweiterle...
Bevor Sie mit dem Haupttext dieses Artikels begin...
Microsoft IIS IIS (Internet Information Server) i...
Hintergrund Wir verwenden Chrome Dev Tools häufig...
brauchen: Verwenden Sie Vue, um das Scannen von Q...
Sechs EffekteImplementierungscode html <h1>...
Benutzer virtueller Maschinen richten normalerwei...
Einführung: Dieser Artikel verwendet das von reac...
Inhaltsverzeichnis Welche Dienstprogramme bietet ...
1. Hintergrund Im Allgemeinen können wir in einer...
html <!DOCTYPE html> <html lang="de...
Denken Sie unbedingt daran, Ihre Daten zu sichern...
1. Ändern Sie die Firewall-Einstellungen und öffn...
In die CSS-Datei schreiben Code kopieren Der Code ...
Apache Tomcat ist eine Open-Source-Software, die ...