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

相关文章
相关标签/搜索