Maison >base de données >tutoriel mysql >Comment créer efficacement une table de grands nombres consécutifs dans MySQL ?
Générer efficacement une grande table de nombres séquentiels dans MySQL nécessite une meilleure approche que de simples INSERT
boucles. L'insertion directe de lignes une par une, en recherchant à plusieurs reprises la valeur maximale, est inefficace et sujette aux erreurs.
Ce qui suit illustre une approche imparfaite et met en évidence ses lacunes :
<code class="language-sql">CREATE TABLE numbers ( number INT NOT NULL, PRIMARY KEY (number) ); INSERT INTO numbers (number) VALUES (0); -- Inefficient and error-prone loop (Illustrative only, contains errors) -- ... (Loop using WHILE and SELECT MAX(number) repeatedly) ...</code>
Cette méthode souffre de problèmes de performances dus à des SELECT MAX(number)
appels répétés au sein de la boucle. De plus, l'exemple d'extrait de code est incomplet et contient des erreurs de syntaxe.
Une solution plus efficace utilise une procédure stockée et évite le besoin d'opérations SELECT
continues :
<code class="language-sql">DROP PROCEDURE IF EXISTS genData; DELIMITER // CREATE PROCEDURE genData(OUT a INT, OUT b INT) BEGIN DECLARE i INT UNSIGNED; DECLARE j INT UNSIGNED; SET a = FLOOR(RAND() * 32768); SET b = MOD(RAND() * 16, 256); SET i = a | (b << 16); SET j = 0; WHILE j < 65535 DO INSERT INTO numbers (number) VALUES (i); IF i >= 65535 THEN SET i = i ^ 16; SET b = (b + 1) & 255; SET a = a + 1; END IF; SET j = j + 1; END WHILE; END // DELIMITER ;</code>
Cette procédure stockée fournit une méthode beaucoup plus rapide pour générer un grand nombre de lignes. Cette approche améliore considérablement les performances par rapport à la méthode itérative INSERT
. L'utilisation d'une procédure stockée rationalise le processus et permet la création efficace de tables de nombres étendues dans MySQL.
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!