ITPub博客

首页 > 数据库 > 数据库开发技术 > 效率提升16800倍的连续整数生成方法

效率提升16800倍的连续整数生成方法

原创 数据库开发技术 作者:数据库干货铺 时间:2019-08-06 07:40:00 0 删除 编辑
很多时候需要用到连续的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编程》,在此给姜老师再刷一波广告)
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,感兴趣的小伙伴可以亲自测一下。
 
Tips:
性能提升的原因在于方法1需要执行20W次insert,而方法2是按照2的指数级插入,20W数据只需要不到20次的插入即可完成。

想进一步沟通或想了解其他文章的同学可以关注我

精彩推荐:

1. MySQL不停地自动重启怎么办

2. 升级python,就是这么简单

3. MySQL里trx_mysql_thread_id为0 的事务导致大量锁等待超时该咋整

4. mysql8.0新增用户及加密规则修改的那些事



原文作者:数据库干货铺;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-07-18

  • 博文量
    273
  • 访问量
    66461