当前位置:Gxlcms > 数据库问题 > mysql批量数据导入探究

mysql批量数据导入探究

时间:2021-07-01 10:21:17 帮助过:2人阅读

import java.io.BufferedReader; 2 import java.io.FileReader; 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 7 /** 8 * 9 */ 10 public class PreparedStatementTestMain { 11 private static PreparedStatement ps; 12 public static void main(String[] args) { 13 try{ 14 Class.forName("com.mysql.jdbc.Driver"); 15 Connection conn = DriverManager.getConnection("jdbc:mysql://remote-host/test?user=xxx&password=xxx"); 16 String sql = "insert into test values(?,?,?,?,?,?,?,?,?,?,?)"; 17 ps = conn.prepareStatement(sql); 18 19 BufferedReader in = new BufferedReader(new FileReader("xxxx")); 20 String line; 21 int count =0; 22 while((line = in.readLine())!=null){ 23 count+=1; 24 String[] values = line.split("\t",-1); 25 //ps.setInt(1,count); 26 for(int i =1;i<values.length;i++) { 27 // if(i==6){ 28 // ps.setInt(i+1,Integer.parseInt(values[i])); 29 // }else{ 30 // if(values[i]==null){ 31 // ps.setString(i," "); 32 // }else { 33 ps.setString(i, values[i]); 34 // } 35 // } 36 } 37 ps.addBatch(); 38 System.out.println("Line "+count); 39 } 40 ps.executeBatch(); 41 ps.close(); 42 }catch(Exception e){ 43 e.printStackTrace(); 44 } 45 } 46 }

 

尝试3:

  使用mysqlimport工具。经过实测,速度接近于尝试2中加上rewriteBatchedStatements之后的速度。不过前提是数据必须要保存为文件。

  

  

 

rewriteBatchedStatements到底为什么对速度优化这个多?

  一种说法:这样做的目的是为了让mysql能够将多个mysql insert语句打包成一个packet和mysql服务器通信。这样可以极大降低网络开销。

  另一种说法:

  Rewriting Batches

  ? “rewriteBatchedStatements=true”

     ? Affects (Prepared)Statement.add/executeBatch()

  ? Core concept - remove latency

  ? Special treatment for prepared INSERT statements

  ——Mark Matthews - Sun Microsystems

 

PreparedStatement VS Statement

  数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的使用中重用。

 

mysql批量数据导入探究

标签:

人气教程排行