数据库压力测试--MySQL数据库快速插入大量数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33429968/article/details/53089171

一、前言

应本次数据库压力测试的要求,测试数据记录至少为千万级,所以,问题来了,如何快速插入大量数据.

二、解决方法一

第一种解决方法是在MySQL终端中实现的,具体方法如下.
a.打开MySQl数据库;

mysql -u root -p

b.创建数据库;

mysql> create database insertData;

use insertData;

create CREATE TABLE InsertTable (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;(PS:本数据库为MySQl的内存数据库)

c.创建插入数据的“函数”;

mysql> delimiter @//可实现多行命令的输入,作用很大
create procedure insert_InsertTable(in item integer)//类似于函数参数列表
begin
declare counter int;
set counter = item;
while counter >= 1 do
insert into myisam values(counter,concat('Record.',counter));
set counter = counter - 1;
end while;
end
@

d.调用该函数(比如插入10 000 000条测试数据);

delimiter @//不可省
call insert_InsertTable(100);
@

e.然后使用命令查看是否成功插入数据;

select count(*) from InserTable;

三、解决方法二

通过使用可知,上文中的方法一显然太过于麻烦,现在考虑将上文中的InsertTable函数写到一个.sql文件,直接调用命令就能实现将数据插入MySQL数据库.将数据库的创建、数据表的创建、数据的插入一步实现
具体实现如下:
a.创建.sql文件insert_data.sql;

drop database if exists insertData;
create database insertData;
use insertData;

SET max_heap_table_size = 1024*1024*2000;//必要的配置,为MySQL分配更大的内存,便于存储
CREATE TABLE InsertTable (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;


delimiter @
create procedure insert_InsertTable(in item integer)
begin
declare counter int;
set counter = item;
while counter >= 1 do
insert into InsertTable values(counter,concat('Record.',counter));
set counter = counter - 1;
end while;
end
@

delimiter @
call insert_InsertTable(10000000);
@

b.调用.sql文件;

mysql -u root -p <insert_data.sql

c.查数据是否插入;

select count(*) from InsertTable;

四、其他问题

4.1imiter @ @的作用
可以实现在终端执行多次命令,避免回车的影响.
4.2查看存储数据量命令

select count(*) from InserTable;

4.3删除数据表中的数据命令

truncate TableName;
或者
delete from TableName;

五、待优化问题

5.1如何插入随机数
5.2如何插入多种数据类型的数据
5.3如何插入多条字段的数据

阅读更多
换一批

没有更多推荐了,返回首页