Maison > base de données > tutoriel mysql > le corps du texte

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

PHPz
Libérer: 2024-07-18 08:24:19
original
832 Les gens l'ont consulté

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!

source:dev.to
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!