>데이터 베이스 >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 루프보다 더 나은 접근 방식이 필요합니다. 최대값을 반복적으로 쿼리하면서 행을 하나씩 직접 삽입하는 것은 비효율적이며 오류가 발생하기 쉽습니다.

다음은 결함이 있는 접근 방식을 보여주고 그 단점을 강조합니다.

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.