不少時候須要用到連續的id進行數據對比,如判斷是否連續等問題。那麼,生成連續整數的方式有多種,首先容易想到的是逐步循環,若是想生成1kw條記錄,則須要循環1kw次進行插入,那麼有沒有其餘方式呢,效率相對於逐步加一有多少提高呢。帶此疑問,咱們進行一番測試。數據庫
提早建立一張存放記錄的表編程
CREATE TABLE nums(id INT);
1. 使用逐步+1遞增的循環方式微信
DELIMITER $$ CREATE PROCEDURE sp_createNum1 (cnt INT) BEGIN DECLARE i INT DEFAULT 1 ; TRUNCATE TABLE nums ;WHILE i <= cnt DO BEGIN INSERT INTO nums SELECT i; SET i = i+1 ; END ; END WHILE ; END $$ DELIMITER ;
生成20W數據用時達到14min,不是通常的慢。性能
2. 二的N次方法插入測試
此方法借鑑於姜老師的書上,不過對此進行了改造,解決輸入值與最終得到的記錄不一致的狀況。(具體狀況,能夠翻看姜老師的《MySQL技術內幕:SQL編程》,在此給姜老師再刷一波廣告)spa
DELIMITER $$ CREATE PROCEDURE `sp_createNum`(cnt INT ) BEGIN DECLARE i INT DEFAULT 1; TRUNCATE TABLE nums; INSERT INTO nums SELECT i; WHILE i < cnt DO BEGIN INSERT INTO nums SELECT id + i FROM nums WHERE id + i<=cnt; SET i = i*2; END; END WHILE;
END$$ DELIMITER ;
相同的數據庫下,本次只須要0.05s,感興趣的小夥伴能夠親自測一下。3d
Tips:code
性能提高的緣由在於方法1須要執行20W次insert,而方法2是按照2的指數級插入,20W數據只須要不到20次的插入便可完成。blog
耿小廚已開通我的微信公衆號,想進一步溝通或想了解其餘文章的同窗能夠關注我ip