在 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中文網其他相關文章!