MySQL快速生成連續整數

不少時候須要用到連續的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

相關文章
相關標籤/搜索