简介:预分配ID的设计,需要先为数据库生成大量的数据。比如对用户ID有要求的系统,那么用户ID就要预先生成。通过python,php,c/c++/c#,js等程序生成也是可以,但需要这些程序环境,而且单条插入太慢,又因为数据包大小 ...

预分配ID的设计,需要先为数据库生成大量的数据。比如对用户ID有要求的系统,那么用户ID就要预先生成。通过python,php,c/c++/c#,js等程序生成也是可以,但需要这些程序环境,而且单条插入太慢,又因为数据包大小问题,需要切割INSERT语句。还要写连接字符串,安装组件等等,比较麻烦。我写了一个通过存储过程即可实现大批量插入的代码,虽然也是要切割,但减少了很多环节,使数据库部分更完整,更容易分发与部署。其核心思想是拼接字符串concat,执行execute,大于1万行则分开执行。首先创建测试用的表:
CREATE TABLE `map` ( `id` int(11) NOT NULL AUTO_INCREMENT, `gp` point DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
然后是存储过程:

用存储过程向数据库添加大量数据「mysql」

CREATE PROCEDURE `init_map`(in count int)BEGIN declare jump int DEFAULT count; WHILE jump>0 DO BEGIN DECLARE i INT DEFAULT 1; DECLARE c INT DEFAULT jump; IF c>10000 THEN SET c=10000; END IF; SET @sq=concat("INSERT INTO map(gp) VALUES (st_geomfromtext("POINT(",(rand()*50+75)," ",(rand()*50+75),")"))"); WHILE i<c DO SET @sq=concat(@sq,",(st_geomfromtext("POINT(",(rand()*50+75)," ",(rand()*50+75),")"))"); SET i=i+1; END WHILE; SELECT @sq; PREPARE s FROM @sq; EXECUTE s; DEALLOCATE PREPARE s; SET jump=jump-c; END; END WHILE;END
然后是执行存储过程,10万行,观察时间,当然是很快的。
CALL init_map(100000);
作者:fyter原文:https://www.cnblogs.com/fyter/p/stored_procedure_gen_much_data.html

用存储过程向数据库添加大量数据「mysql」

本文仅代表作者个人观点,不代表巅云官方发声,对观点有疑义请先联系作者本人进行修改,若内容非法请联系平台管理员,邮箱2522407257@qq.com。更多相关资讯,请到巅云www.rzxsoft.cn学习互联网营销技术请到巅云建站www.rzxsoft.cn。