2017-07-19 55 views
0

我正在嘗試讀取,拆分爲有意義的變量,然後將4Gb文本文件的信息插入到數據庫中。樣品1.2Mb的讀數(需要時打印)需要幾百毫秒,但將信息插入數據庫需要幾秒鐘(30+)。我正在使用兩個數據庫(該文件包含兩種不同類型的記錄)。我的代碼看起來像這樣:使用JAVA緩慢插入SQL

try { 
    reader = new BufferedReader(new FileReader(filename)); 
    openConnection(); 
    ch = reader.read(); 
    while (ch != -1) { 
     if ((char)ch == '1') { 
      sql = parseCliente(); 
      st.executeUpdate(sql); 
     } 
     else if ((char)ch == '2') { 
      sql = parseRegistro(); 
      st.executeUpdate(sql); 
     } 
     else if (ch == -1) break; 
     else { 
      ch = reader.read(); 
     } 
    } 
    closeConnection(); 
} 
catch (IOException e) { 
    e.printStackTrace(); 
} catch (SQLException e) { 
    e.printStackTrace(); 
} 

我的代碼實際上工作,但我需要更快的方法或操作將需要幾天!

+3

檢查「批處理語句」的文檔,請參閱https://stackoverflow.com/questions/3784197/efficient-way-to-do-batch-inserts-with-jdbc例如 – 2017-07-19 18:24:03

+0

您可以使用事務嗎?你使用自動提交嗎? –

+0

很難說不知道你的數據庫有什麼 - 它是一個大型的數據庫,是否有唯一的和外鍵約束或索引?這些都可以影響插入和更新的速度。 – Jesper

回答

1

我改變了策略,並將處理後的數據加載到CSV文件中,然後使用LOAD DATA INFILE命令將其傳輸到數據庫。我的樣本從37秒到不到1秒。

+0

'LOAD DATA INFILE'會比'INSERT INTO TABLE'更快。 –