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 avoir besoin de 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.
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 :
Tout d'abord, créez le tableau :
CREATE TABLE hashes ( id INT PRIMARY KEY AUTO_INCREMENT, hash CHAR(64) );
Définissez la variable de session pour autoriser une profondeur de récursion plus élevée :
SET SESSION cte_max_recursion_depth = 1000000;
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 nCette 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;La variable système cte_max_recursion_degree définit la limite supérieure de 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 nDécomposons cette requête :
AVEC RECURSIVE cte (n) : ceci démarre la définition du CTE. cte est le nom du jeu de résultats temporaire et n est la colonne.
SELECT 1 : Il s'agit de la partie non récursive du CTE, servant de point de départ (valeur initiale).
UNION ALL SELECT n 1 FROM cte WHERE n
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.
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 gros volumes de données de manière transparente.
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 :
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 ) -> SELECT SHA2(n, 256) FROM cte; Query OK, 1000000 rows affected (4.43 sec) Records: 1000000 Duplicates: 0 Warnings: 0
Nombre de rangées | Temps d'exécution |
---|---|
1 000 | 0,03 s |
10 000 | 0,07 s |
100 000 | 0,42 s |
1 000 000 | 4,43 secondes |
10 000 000 | 48,53 secondes |
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 à jour avec le contenu technique le plus récent et détaillé comme celui-ci. Bon codage !
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3