ホームページ >データベース >mysql チュートリアル >MySQL で大きな連続数値テーブルを効率的に作成するにはどうすればよいですか?
MySQL で連続番号の大きなテーブルを効率的に生成するには、単純な INSERT
ループよりも優れたアプローチが必要です。 行を 1 つずつ直接挿入し、最大値を繰り返しクエリすることは非効率であり、エラーが発生しやすくなります。
以下は、欠陥のあるアプローチを示し、その欠点を強調しています:
<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>
このメソッドは、ループ内で SELECT MAX(number)
呼び出しが繰り返されるため、パフォーマンスの問題が発生します。 さらに、サンプル コード スニペットは不完全で、構文エラーが含まれています。
より効率的なソリューションでは、ストアド プロシージャを利用し、継続的な SELECT
操作の必要性を回避します。
<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>
このストアド プロシージャは、大量の行を生成するためのより高速な方法を提供します。 このアプローチでは、反復 INSERT
メソッドと比較してパフォーマンスが大幅に向上します。 ストアド プロシージャを使用するとプロセスが合理化され、MySQL で広範な数値テーブルを効率的に作成できるようになります。
以上がMySQL で大きな連続数値テーブルを効率的に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。