Générer de grandes séquences numériques dans MySQL : une approche corrigée
Cet article aborde le défi de créer une grande table de nombres consécutifs dans MySQL. Une tentative précédente a entraîné une erreur de syntaxe en raison de points-virgules et de virgules manquants. Voici le code corrigé et une alternative plus efficace utilisant des générateurs.
Syntaxe corrigée pour l'insertion directe :
Le code suivant montre la syntaxe correcte pour créer la table et insérer des données, bien que ce ne soit pas la méthode la plus efficace pour les grandes séquences :
<code class="language-sql">CREATE TABLE numbers ( number INT NOT NULL, CONSTRAINT XPKnumbers PRIMARY KEY CLUSTERED (number) ); INSERT INTO numbers (number) VALUES (0); -- The following section contains a syntax error in the original post and is not valid MySQL. A procedural approach is needed for iterative insertion. -- A stored procedure or a loop within a script would be more appropriate for large datasets.</code>
Approche efficace avec les générateurs :
Une méthode nettement plus efficace exploite la puissance des vues MySQL pour créer des générateurs. Ces générateurs produisent des séquences de nombres qui peuvent ensuite être insérées dans le tableau numbers
. Cela évite les requêtes répétées pour le nombre maximum existant.
Voici un exemple de la façon de construire de tels générateurs :
<code class="language-sql">CREATE OR REPLACE VIEW generator_16 AS SELECT 0 n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15; CREATE OR REPLACE VIEW generator_256 AS SELECT ((hi.n << 4) | lo.n) AS n FROM generator_16 lo, generator_16 hi; -- Create additional generator views (generator_4096, generator_64k, etc.) as needed, building upon previous ones.</code>
Population efficace de la table :
Une fois les générateurs créés, vous pouvez remplir efficacement le numbers
tableau :
<code class="language-sql">INSERT INTO numbers (number) SELECT n FROM generator_64k; -- Replace generator_64k with the appropriate generator view for your desired range.</code>
En utilisant cette approche génératrice, vous évitez le goulot d'étranglement des performances des insertions itératives et accélérez considérablement le processus de création d'une grande séquence numérique dans votre base de données MySQL. N'oubliez pas d'ajuster la vue du générateur utilisée (generator_64k
dans cet exemple) pour qu'elle corresponde à la taille de la séquence dont vous avez besoin.
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!