作業要求
構建一個關系模式和課本中的關系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/
歡迎討論和交流!
