LOAD DATA INFILE讀取CSV中一千萬條數據至mysql


作業要求

構建一個關系模式和課本中的關系movies(title,year,length,movietype,studioname,producerC)一樣的關系,名稱自定,在這個關系中插入1000萬條記錄。

注:關系movies的主鍵為(title,year)

要求如下:

  1. 在盡可能短的時間內完成;
  2. 只允許使用原生的SQL,不允許將SQL作為嵌入語言,也不允許使用其他語言如C#、Python等來完成;
  3. 提交你的詳細解決方案和結果。

本文利用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分鍾,如下圖所示:

LOADDATAINFILE插入一千萬條數據結果

參考鏈接

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/

歡迎討論和交流!



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM