预分配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;

然后是存储过程:

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);

用存储过程向数据库添加大量数据【mysql】的更多相关文章

  1. MySql使用存储过程清除数据库所有表数据,保存数据结构

    BEGIN DECLARE strClear VARCHAR(256); DECLARE done INT DEFAULT 0; #定义游标 DECLARE curOne CURSOR FOR sel ...

  2. 向数据库添加中文数据乱码的解决办法(本文使用spring-jdbcTemplate)

    由于编码字符集的不同通常容易导致数据库中文乱码问题,如显示问号. 往往由以下三个方面所造成的 (一):数据库端字符集设置 1.安装mysql时,会有一个数据库编码设置,将其设置为utf-8 2.先设置 ...

  3. EF CodeFirst系列(9)---添加初始化数据和数据库迁移策略

    1.添加初始化数据(Seed) 我们可以在初始化数据库的过程中给数据库添加一些数据.为了实现初始化数据(seed data)我们必须创建一个自定义的数据库初始化器(DB initializer),并重 ...

  4. Django(六)实战2:向数据库添加,删除数据、重定向写法、重定向简写

    一.向数据库添加图书数据 [上接]https://blog.csdn.net/u010132177/article/details/103831173 1)首先开启mysql服务,并运行项目 启动my ...

  5. [转]Magento2开发教程 - 如何向数据库添加新表

    本文转自:https://www.cnblogs.com/xz-src/p/6920365.html Magento 2具有特殊的机制,允许你创建数据库表,修改现有的,甚至添加一些数据到他们(如安装数 ...

  6. Magento2开发教程 - 如何向数据库添加新表

    Magento 2具有特殊的机制,允许你创建数据库表,修改现有的,甚至添加一些数据到他们(如安装数据,已被添加在模块安装). 这种机制允许这些变化可以在不同的设备之间传输. 关键的概念是,而不是做你能 ...

  7. 及时从数据库中取得数据填放进Form表单的多选框中

    #写上以下代码就不用担心数据库添加了数据而不能及时获取了 def __init__(self, *args, **kwargs): #每次创建Form1对象时执行init方法 super(Form1, ...

  8. Mysql使用存储过程快速添加百万数据

    前言 为了体现不加索引和添加索引的区别,需要使用百万级的数据,但是百万数据的表,如果使用一条条添加,特别繁琐又麻烦,这里使用存储过程快速添加数据,用时大概4个小时. 创建一个用户表 CREATE TA ...

  9. 切记!pycharm向mysql数据库添加数据过程

    python 导入包import requests   以爬取腾讯招聘网的招聘信息为例:(完整代码) import requestsfrom lxml import etreeimport pymys ...

随机推荐

  1. 【我们一起写框架】C#的AOP框架

    前言 AOP,大家都是听过的,它是一种面向切面的设计模式. 不过AOP虽然是被称为设计模式,但我们应该很少能看到AOP设计的框架.为什么呢? 因为,AOP单独设计的框架几乎是无法使用的.普遍的情况是, ...

  2. 怎么让DIV在另一个DIV里靠底部显示?

    可以使用css的position属性的绝对定位. 拓展知识 position 属性指定了元素的定位类型. position 属性的五个值: static:HTML元素的默认值,即没有定位,元素出现在正 ...

  3. 高通QCC3026蓝牙音频芯片处理器介绍

    QCC3026是一款基于超低功耗架构的入门级闪存可编程蓝牙音频SoC,专为紧凑型功能优化的Qualcomm TrueWireless耳塞而设计.QCC3026旨在为我们的客户提供有助于缩短开发时间并具 ...

  4. 牛客网《BAT面试算法精品课》学习笔记

    目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...

  5. Shell中map的使用

    Shell中的map与array有很多的相似之处,array操作:https://www.cnblogs.com/qq931399960/p/10786111.html 一.在使用map时,需要先声明 ...

  6. Flask python初期九九乘法表

    from  flask import Flask    #导入 app = Flask(__name__) @app.route('/') def index(): res=" " ...

  7. 批量执行工具PSSH详解

    批量执行工具PSSH详解 pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,使用必须在各个服务器上配置好密钥认证访问. 安装pssh包 yum 安 ...

  8. WebApiClient的SteeltoeOSS.Discovery扩展

    1 背景 从园子里看到一些朋友在某些项目开发中,选择的架构是spring cloud搭建底层微服务框架,dotnet core来编写业务逻辑,SteeltoeOSS.Discovery是dotnet和 ...

  9. Window环境下搭建Git服务器

    如果公司要搭建自己的 Git 服务器,可以使用 gitblit 这个开源的 Git 服务器 下载gitblit安装包 到 http://gitblit.com/下载安装包 解压缩下载的压缩包即可,无需 ...

  10. python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍

    目录 python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍.md 一丶字典 1.字典的定义 2.字典的使用. 3.字典的常用方法. python学习第八讲,python ...