【发布时间】:2015-11-20 06:30:50
【问题描述】:
我有一个简单的三列表格测试
id -> primary key (auto increment)
name -> varchar
age -> int
我正在使用一个简单的存储过程在表中填充 100 万条数据。
drop PROCEDURE if EXISTS big_data;
CREATE PROCEDURE big_data()
BEGIN
DECLARE i int DEFAULT 1;
WHILE i <= 10000000 DO
INSERT INTO test(id, name, age) VALUES (i, 'name', 34);
SET i = i + 1;
END WHILE;
END;
CALL big_data();
我面临的问题是使用这个简单的模式插入 100 万条记录需要将近 6 到 7 个小时。我想知道如何快速插入数据?
我不想使用LOAD DATA INFILE 查询,我没有更改 my.ini 文件中的任何设置。
只是想知道插入太慢的原因?
系统规格
Mysql version 5.5.25a
innodb_version =1.1.8
System = 16GB RAM / 8 cores @ 2.70 GHz
【问题讨论】:
-
考虑到这是一种非常低效的插入数据方式,您的数据库实际上每秒插入几百行。没那么糟糕。考虑到机器上的大多数内核对这种串行插入(它是单线程的)都没有好处......简而言之,它很慢,因为你使用了错误的数据库。
-
我没有明白您使用了错误的 DB @AssafLavie 并建议我使用有效的方式插入数据?
-
不是错误的数据库,而是错误的使用数据库。执行批量插入或加载数据。这就是它的用途。
-
如果 id 是自增的,为什么还要插入呢?
标签: mysql performance bulkinsert