ホームページ >データベース >mysql チュートリアル >MySQL で大きな連続数値テーブルを効率的に作成するにはどうすればよいですか?

MySQL で大きな連続数値テーブルを効率的に作成するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-11 16:36:45352ブラウズ

How to Efficiently Create a Large Consecutive Numbers Table in 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。