Maison base de données tutoriel mysql Comment injecter des données factices simples à grande échelle dans MySQL

Comment injecter des données factices simples à grande échelle dans MySQL

Jul 18, 2024 am 08:24 AM

How to inject simple dummy data at a large scale in MySQL

Introduction

Vous êtes-vous déjà retrouvé dans une situation où vous aviez besoin d'une grande quantité de données factices pour les tests, mais ne vouliez pas passer des heures à écrire des scripts ou à insérer manuellement des enregistrements ? Ou peut-être êtes-vous curieux de savoir comment tirer parti des nouvelles fonctionnalités de MySQL 8.0 pour rationaliser les tâches de votre base de données ? Eh bien, vous allez vous régaler ! Dans cet article, nous explorerons comment utiliser les expressions de table communes (CTE) pour générer et insérer sans effort de grandes quantités de données factices dans votre base de données MySQL.

Imaginez devoir remplir une table avec un million de valeurs de hachage pour des tests de charge ou une analyse comparative des performances. Cela ressemble à un cauchemar, non ? Pas plus! Avec l'avènement des CTE dans MySQL 8.0, vous pouvez y parvenir en quelques secondes. Voyons comment cela fonctionne et comment vous pouvez utiliser cette fonctionnalité puissante pour simplifier vos besoins de génération de données.

TL ; RD

Les expressions de table communes (CTE), une nouvelle fonctionnalité ajoutée dans MySQL 8.0, peuvent être utilisées pour saisir facilement une grande quantité de données factices simples. Par exemple, si vous souhaitez saisir 1 million de données factices dans une table appelée hachages qui stocke les valeurs de hachage, vous pouvez y parvenir en procédant comme suit :

Définitions des tableaux

Tout d'abord, créez le tableau :

CREATE TABLE hashes (
  id INT PRIMARY KEY AUTO_INCREMENT,
  hash CHAR(64)
);
Copier après la connexion

Exécution de requête

Définissez la variable de session pour autoriser une profondeur de récursion plus élevée :

SET SESSION cte_max_recursion_depth = 1000000;
Copier après la connexion
Copier après la connexion

Ensuite, exécutez le CTE pour insérer 1 million de lignes :

INSERT INTO hashes(hash)
WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte WHERE n < 1000000
)
SELECT SHA2(n, 256) FROM cte;
Copier après la connexion
Copier après la connexion

Cette méthode exploite une expression de table commune récursive pour générer les données factices.

Comprendre les CTE

Une expression de table commune (CTE) est un jeu de résultats temporaire nommé qui peut être référencé plusieurs fois dans une seule instruction. Les CTE sont particulièrement utiles pour simplifier les requêtes complexes et améliorer la lisibilité.

Répartition de la syntaxe

Définition de la profondeur de récursion

SET SESSION cte_max_recursion_depth = 1000000;
Copier après la connexion
Copier après la connexion

La variable système cte_max_recursion_degree définit la limite supérieure de la récursion. Par défaut, c'est 1000, donc pour récurer davantage, vous devez l'ajuster. Ici, nous l'avons fixé à 1 million.

La requête CTE

INSERT INTO hashes(hash)
WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte WHERE n < 1000000
)
SELECT SHA2(n, 256) FROM cte;
Copier après la connexion
Copier après la connexion

Décomposons cette requête :

  • AVEC RECURSIVE cte (n) : Ceci démarre la définition du CTE. cte est le nom de l'ensemble de résultats temporaire et n est la colonne.

  • SELECT 1 : C'est la partie non récursive du CTE, servant de point de départ (valeur initiale).

  • UNION ALL SELECT n + 1 FROM cte WHERE n < 1000000 : C'est la partie récursive, qui incrémente la valeur de n de 1 jusqu'à atteindre 1 000 000.

  • SELECT SHA2(n, 256) FROM cte : Cette dernière partie de la requête sélectionne le hachage SHA-256 de chaque n valeur, générant les données factices à insérer.

Comment ça marche

Le CTE génère de manière récursive des nombres de 1 à 1 000 000. Pour chaque numéro, il calcule le hachage SHA-256 et l'insère dans la table de hachage. Cette approche est efficace et exploite les capacités récursives de MySQL pour gérer de manière transparente de gros volumes de données.

Vitesse de traitement

Environnement de vérification

Pour comprendre l'impact de cette fonctionnalité, j'ai utilisé un espace de travail Gitpod Enterprise, tirant parti de l'environnement puissant et éphémère pour éviter les tracas de configuration et d'installation. Voici un aperçu de la configuration :

  • Machine : Gitpod Enterprise XXGrand espace de travail
  • OS : Ubuntu 22.04.4 LTS (Jammy Jellyfish)
  • Conteneurisation : Docker version 26.0.1
  • Version MySQL : Image Docker officielle de MySQL 8.0

Résultats

Pour 1 million de lignes, le temps d'exécution de la requête est d'environ 4,46 secondes :

mysql> INSERT INTO hashes(hash)
    -> WITH RECURSIVE cte (n) AS
    -> (
    ->   SELECT 1
    ->   UNION ALL
    ->   SELECT n + 1 FROM cte WHERE n < 1000000
    -> )
    -> SELECT SHA2(n, 256) FROM cte;
Query OK, 1000000 rows affected (4.43 sec)
Records: 1000000  Duplicates: 0  Warnings: 0
Copier après la connexion

Mesures de performances

Number of Rows Execution Time
1,000 0.03 sec
10,000 0.07 sec
100,000 0.42 sec
1,000,000 4.43 sec
10,000,000 48.53 sec

Conclusion

L'utilisation des CTE dans MySQL 8.0 change la donne pour générer rapidement de grandes quantités de données factices. C'est particulièrement pratique pour les tests de charge et l'analyse comparative des performances. Avec seulement quelques lignes de code, vous pouvez facilement remplir vos tableaux, puis revenir aux autres parties importantes de votre projet.

N'hésitez pas à jouer avec différentes stratégies de génération de données et profondeurs de récursion pour voir ce qui fonctionne le mieux pour vous. Pour plus de conseils et d'informations sur la sécurité et l'analyse des journaux, suivez-moi sur Twitter @Siddhant_K_code et restez informé du contenu technique le plus récent et détaillé comme celui-ci. Bon codage !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Réduisez l'utilisation de la mémoire MySQL dans Docker Réduisez l'utilisation de la mémoire MySQL dans Docker Mar 04, 2025 pm 03:52 PM

Réduisez l'utilisation de la mémoire MySQL dans Docker

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE? Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE? Mar 19, 2025 pm 03:51 PM

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE?

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée Mar 04, 2025 pm 04:01 PM

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin) Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin) Mar 04, 2025 pm 03:54 PM

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin)

Qu'est-ce que Sqlite? Aperçu complet Qu'est-ce que Sqlite? Aperçu complet Mar 04, 2025 pm 03:55 PM

Qu'est-ce que Sqlite? Aperçu complet

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape Mar 04, 2025 pm 03:49 PM

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape

Quels sont les outils de GUI MySQL populaires (par exemple, MySQL Workbench, PhpMyAdmin)? Quels sont les outils de GUI MySQL populaires (par exemple, MySQL Workbench, PhpMyAdmin)? Mar 21, 2025 pm 06:28 PM

Quels sont les outils de GUI MySQL populaires (par exemple, MySQL Workbench, PhpMyAdmin)?

Comment configurer le cryptage SSL / TLS pour les connexions MySQL? Comment configurer le cryptage SSL / TLS pour les connexions MySQL? Mar 18, 2025 pm 12:01 PM

Comment configurer le cryptage SSL / TLS pour les connexions MySQL?

See all articles