LOAD DATA INFILE读取CSV中一千万条数据至mysql
作业要求
构建一个关系模式和课本中的关系movies(title,year,length,movietype,studioname,producerC)
一样的关系,名称自定,在这个关系中插入1000万条记录。
注:关系movies
的主键为(title,year)
。
要求如下:
- 在尽可能短的时间内完成;
- 只允许使用原生的SQL,不允许将SQL作为嵌入语言,也不允许使用其他语言如C#、Python等来完成;
- 提交你的详细解决方案和结果。
本文利用LOAD DATA INFILE
将包含一千万条数据的CSV文件存入mysql。
实现
除了newcsv.py
,其他命令均为cmd命令。
生成包含1千万条数据的CSV文件
用python生成与关系movies结构相同的包含1千万条数据的CSV文件。
newcsv.py
如下:
该程序大概耗时18秒。
import csv
import time
# num_value条数据
num_value = 10000000
# 开始计时
time_start = time.time()
# 生成文件
with open(r'C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\bigdata.csv', 'w', newline='') as f:
f_csv = csv.writer(f)
f_csv.writerow(['title', 'year', 'length', 'movieType', 'studioName', 'producerC'])
for i in range(1, num_value+1):
f_csv.writerow(['GoGoGo', i, 120, 'sicFic', 'MGM', 100])
# 结束计时
time_end = time.time()
# 输出耗费时间(秒)
print('Time Cost:', time_end - time_start)
登录mysql
mysql -uroot -p123456
上面root
是我的mysql用户名,123456
是我的mysql密码。
进入数据库moviesdb
use moviesdb;
创建关系mymovies
只复制关系movies的结构,并不复制其数据
CREATE TABLE mymovies LIKE movies;
将CSV文件存入数据库
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/bigdata.csv' INTO TABLE mymovies FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;
我的电脑上,该文件存入mysql耗时862.646秒,大概14分钟,如下图所示:
参考链接
https://www.cnblogs.com/freefei/p/7679991.html
https://blog.csdn.net/qq_22855325/article/details/76087138
https://blog.csdn.net/weixin_44595372/article/details/88723191
https://zhidao.baidu.com/question/185665472.html
https://www.cnblogs.com/zhangjpn/p/6231662.html
https://www.cnblogs.com/wangcp-2014/p/8038683.html
https://blog.csdn.net/gb4215287/article/details/82669785
作者:@臭咸鱼
转载请注明出处:https://www.cnblogs.com/chouxianyu/
欢迎讨论和交流!