前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >效率提升16800倍的连续整数生成方法

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

作者头像
July
发布2019-08-08 09:34:51
3470
发布2019-08-08 09:34:51
举报

很多时候需要用到连续的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次的插入即可完成。

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库干货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档