游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4054|回复: 13

MySQL有关insert大量数据的问题(百万行)

[复制链接]

31

主题

257

帖子

1752

积分

金牌会员

申城谍影

Rank: 6Rank: 6

积分
1752
QQ
发表于 2016-5-16 14:34:17 | 显示全部楼层 |阅读模式
大家好,
有个小问题,有关MySQL数据库大量insert的问题:

比如我有个TXT文件,格式类似:
test0007, 55.2
test0903, 34.5
test0321, 63.0
...
test9504, 30.6

有百万行吧。
每行,第一列是字串,第二列是一个浮点数据。

现在我有2个表,

CREATE TABLE IF NOT EXISTS mis_table_test_info
                               ( test_id INT UNSIGNED AUTO_INCREMENT,
                                 test_name VARCHAR(128),
                                 PRIMARY KEY (test_id),
                                 UNIQUE (test_name));

CREATE TABLE IF NOT EXISTS mis_table_data_list
                               ( list_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
                                 test_id INT UNSIGNED,
                                 test_data FLOAT);

需要把第一列的字串从表“mis_table_test_info”里得到ID
再和第二列数据一起,存到表“mis_table_data_list”里。

现在用的方法是:
insert into mis_table_data_list (test_id, test_data)
values ( select test_id from mis_table_test_info where test_name="test0007",
55.2),
values ( select test_id from mis_table_test_info where test_name="test0903",
34.5),
values ( select test_id from mis_table_test_info where test_name="test0321",
63.0),
...

一次插入1000行,速度比较慢,
估计慢在MySQL解析SQL命令上。

好像也没法直接用load data infile,
一次要插入百万行数据,
各位有没好办法?

谢谢。。。


1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20356
QQ
发表于 2016-5-16 15:05:15 | 显示全部楼层

回帖奖励 +5 金币

如果不是实时访问的需求,每1000条的插入是最简单的,虽然慢一点。

0-1000
1001-2000
2001-3000
。。。

31

主题

257

帖子

1752

积分

金牌会员

申城谍影

Rank: 6Rank: 6

积分
1752
QQ
 楼主| 发表于 2016-5-16 15:30:37 | 显示全部楼层
sea_bug 发表于 2016-5-16 15:05
如果不是实时访问的需求,每1000条的插入是最简单的,虽然慢一点。

0-1000

sea_bug 回复真快。。。。。。

是不需要实时,
现在这样1000条,1000条地插入,
一共二百万条数据插完,大概要25分钟,

还是希望再搞快一点。。。

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20356
QQ
发表于 2016-5-16 17:59:58 | 显示全部楼层
200w条记录,花个25分钟,我觉得还算合理

31

主题

257

帖子

1752

积分

金牌会员

申城谍影

Rank: 6Rank: 6

积分
1752
QQ
 楼主| 发表于 2016-5-16 18:26:26 | 显示全部楼层
sea_bug 发表于 2016-5-16 17:59
200w条记录,花个25分钟,我觉得还算合理

嗯,了解。。。。。。

主要是公司内部的一个小项目,
我不是专业搞WEB开发的,
因为搞过个人网站,我自告奋勇要求搞。

有点担心,要是组里其他同事要是看了我的代码,能把时间大大减少,
那我等于白忙。。。

哈哈,所以上来问一下。。。

6

主题

141

帖子

822

积分

高级会员

Rank: 4

积分
822
发表于 2016-5-18 20:00:28 | 显示全部楼层
不知道可不可以建试图,然后直接往试图里面insert数据

6

主题

141

帖子

822

积分

高级会员

Rank: 4

积分
822
发表于 2016-5-18 20:11:48 | 显示全部楼层
还有一种是先把10000条数据做为临时表写进去,然后一起批量插入进去,通过临时表与第一张表关联,应该快很多

31

主题

257

帖子

1752

积分

金牌会员

申城谍影

Rank: 6Rank: 6

积分
1752
QQ
 楼主| 发表于 2016-5-19 10:26:11 | 显示全部楼层
握紧拳头 发表于 2016-5-18 20:11
还有一种是先把10000条数据做为临时表写进去,然后一起批量插入进去,通过临时表与第一张表关联,应该快很 ...

哦,不过往临时表插,不是一样要时间吗?

6

主题

141

帖子

822

积分

高级会员

Rank: 4

积分
822
发表于 2016-5-19 15:09:57 | 显示全部楼层
cndv3996 发表于 2016-5-19 10:26
哦,不过往临时表插,不是一样要时间吗?

批量插入和单条插入时间肯定不一样,你试试就知道了

31

主题

257

帖子

1752

积分

金牌会员

申城谍影

Rank: 6Rank: 6

积分
1752
QQ
 楼主| 发表于 2016-5-20 13:45:30 | 显示全部楼层
握紧拳头 发表于 2016-5-19 15:09
批量插入和单条插入时间肯定不一样,你试试就知道了

嗯,有点不太明白你的意思,
所以问明白一点。。。。。。。

在批量用临时表导入之前,
我不是也要把数据插入临时表吗?

这和直接插进最终的表,区别是?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-5-20 07:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表