很多时候需要用到连续的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,不是一般的慢。

MySQL快速生成连续整数-LMLPHP

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,感兴趣的小伙伴可以亲自测一下。

MySQL快速生成连续整数-LMLPHP

耿小厨已开通个人微信公众号,想进一步沟通或想了解其他文章的同学可以关注我

MySQL快速生成连续整数-LMLPHP

05-11 11:32