mysql快速插入大数据
说的是插入数据,这个倒像是载入数据。
上一篇,是按照插入数据来写的,就是insert into,当时插入一万条实在是太慢了,大概是286734毫秒。
insert into table values,这个values后面都跟上内容的话,大概会快一点,具体时间没测。
然后在网上发现一个牛逼的方式:LOAD DATA INFILE。这个相当快,直接载入txt文本文件中的数据。
前面写了一篇博文,是生成一个txt,向其中写入N条数据,这样就很容易获取这个数据了。写了一堆数据到txt,然后在load data infile到mysql里面。
生成数据文章地址:java写入换行符
还有一篇文章,讲load data infile的,这个是转载的,很实用。地址:mysql导入数据load data infile用法(转)
思路就这样,瞬间很简单了,插入一万条数据,时间是156毫秒,确实很快。
代码写的比较粗糙,如下:
package action; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class InsertData3 { public Connection getConnection(){ // 驱动程序名 String driver = "com.mysql.jdbc.Driver"; // URL指向要访问的数据库名scutcs String url = "jdbc:mysql://127.0.0.1:3306/test"; // MySQL配置时的用户名 String user = "root"; // MySQL配置时的密码 String password = "12345"; Connection conn=null; try { // 加载驱动程序 Class.forName(driver); // 连续数据库 conn = DriverManager.getConnection(url, user, password); } catch (Exception e) { System.out.println("Sorry,can`t find the Driver!"); e.printStackTrace();// TODO: handle exception } return conn; } boolean insertData() throws SQLException{ InsertData3 insertData=new InsertData3(); Connection conn=insertData.getConnection(); if(!conn.isClosed()) System.out.println("begin insert!"); // statement用来执行SQL语句 Statement statement = conn.createStatement(); // 要执行的SQL语句 boolean n=false; long a=System.currentTimeMillis(); String sql = "load data infile 'D:\\myios.txt' ignore into table t0 character set gbk fields terminated by ',' enclosed by '\"' lines terminated by '\\n' (`name`,`age`,`description`);"; n=statement.execute(sql); long b=System.currentTimeMillis(); long c=b-a; System.out.println("spend time:"+c); System.out.println("insert end!"); return n; } public static void main(String[] args) throws FileNotFoundException, SQLException { // TODO Auto-generated method stub String pathname="d:/myios.txt"; File file=new File(pathname); FileOutputStream fop=new FileOutputStream(file); String crlf=System.getProperty("line.separator"); try{ if (!file.exists()) { file.createNewFile(); } for(int i=0;i<10000;i++){ String content="'"+i+"','data','base'"+crlf; //直接添加换行的即可 byte[] contents=content.getBytes(); fop.write(contents); } String endString="done"; byte[] ends=endString.getBytes(); fop.write(ends); fop.flush(); fop.close(); } catch (Exception e) { // TODO: handle exception } InsertData3 insertData3=new InsertData3(); boolean m=insertData3.insertData(); System.out.println("boolean:"+m); } }
除非注明转载,其他文章均为作者原创,可以自由转载,但请注明转载的本文的地址,请尊重作者的劳动成果。