mysql利用存储过程批量插入数据

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
+关注继续查看

近期须要測试一下mysql单表数据达到1000W条以上时增删改查的性能。因为没有现成的数据,因此自己构造。本文仅仅是实例。以及简单的介绍。

首先当然是建表:

CREATE TABLE `fortest` (
  `ID` INT(30) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `IP` VARCHAR(32) NOT NULL,
  `OID` VARCHAR(15) DEFAULT NULL)

其次。构建存储过程:

DELIMITER $$

USE `插入表所在的数据库名字`$$

DROP PROCEDURE IF EXISTS `autoinsert`$$

CREATE DEFINER=`root`@`192.168.137.10` PROCEDURE `autoinsert`(IN IP_NUM INT, IN OID_NUM INT)
BEGIN
  DECLARE iIP INT DEFAULT 0 ;
  DECLARE iOID INT DEFAULT 0 ;   
   WHILE(iIP < IP_NUM)
    DO
      SET iOID = 0;
      WHILE(iOID<OID_NUM)
      DO
        SET @mySql=CONCAT("INSERT INTO fortest (IP, OID) VALUES(CONCAT((ROUND(RAND() * 255) + 1),'.',(ROUND(RAND() * 255) + 1),'.',(ROUND(RAND() * 255) + 1),'.',(ROUND(RAND() * 255) + 1)),ROUND(RAND()*100)+1);");            
        PREPARE stmt FROM @mySql;
        EXECUTE stmt;  
        DEALLOCATE PREPARE stmt;
        SET iIP = iIP+1;
      END WHILE;
        SET iPC = iPC+1;
    END WHILE;

    END$$

DELIMITER ;

上述存储过程指定了两个输入參数:IP_NUM  OID_NUM,两个參数分别指定了有多少台机器,以及每台机器有多少OID。

之后调用存储过程就能够了:

call autoinsert 1000 50


意思是,有100台机器。每一个机器有50个參数。

这样,我们就构建了50000条数据,假设按上述存储过程,想达到1000W的数据。还是要花点时间的。能够採用例如以下方法,进一步提快速度:

首先创建具有相同表结构的表:

CREATE TABLE fortest_2 LIKE fortest;


然后依据fortest表插入5W条数据

INSERT INTOfortest_2(IP,OID) SELECT IP,ROUND(RAND() * 100) + 1) FROM fortest;

上述一条语句运行速度特别快,瞬间就插入了5W条数据。能够写个脚本运行:

#!/bin/bash

i=1;
MAX_INSERT_ROW_COUNT=$1;
j=0;
while [ $i -le $MAX_INSERT_ROW_COUNT ]
do
    time mysql -h192.168.137.1 -uroot -p123456 fortest -e "INSERT INTOfortest_2(IP,OID) SELECT IP,ROUND(RAND() * 100) + 1) FROM fortest;"
    echo "INSERT $i "    
    i=$(($i+1))
#    sleep 0.05
done

exit 0







本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5268262.html,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
存储 关系型数据库 MySQL
MySQL中存储过程中的控制语句使用详解
MySQL中存储过程中的控制语句使用详解
19 0
|
8天前
|
存储 SQL 关系型数据库
MySQL中存储过程使用详解
MySQL中存储过程使用详解
29 0
|
8天前
|
存储 SQL 关系型数据库
MySQL基础-存储过程与函数
MySQL基础-存储过程与函数
|
8天前
|
存储 SQL 关系型数据库
MySQL中不同类型参数存储过程示例
MySQL中不同类型参数存储过程示例
21 0
|
23天前
|
存储 关系型数据库 MySQL
MySQL存储过程学习总结
MySQL存储过程学习总结
17 0
|
25天前
|
存储 关系型数据库 MySQL
MySQL定时任务存储过程函数和动态表名实例
MySQL定时任务存储过程函数和动态表名实例
|
25天前
|
存储 关系型数据库 MySQL
mysql创建定时执行存储过程任务
mysql创建定时执行存储过程任务
|
25天前
|
存储 关系型数据库 MySQL
Navicat创建MySQL存储过程
Navicat创建MySQL存储过程
|
25天前
|
存储 关系型数据库 MySQL
Navicate设置MySQL定时任务执行存储过程
Navicate设置MySQL定时任务执行存储过程
|
1月前
|
存储 Oracle 关系型数据库
mysql存储过程调试方法
mysql存储过程调试方法
推荐文章
更多