mysql 优化
本文是笔者工作学习中对于mysql优化经历的小结。
1.load data local infile
它真的是一个神奇的方法。
但这种方法使用的前提是:要插入数据库的数据是在文件中,并且格式良好。(文件的一行映射数据表的一行)
简要代码如下:
String sqlString = "load data local infile ? into table news"; statemenet = con.prepareStatement(sqlString); statemenet.setString(1, "files/news.txt"); statemenet.executeUpdate();
请自行补充其他的代码,以及try catch代码。
2.一次insert多个值
使用类似下面的sql语句:
insert ...values (),(),()
这种方法可以一次插入多个值,数目在200~500比较好。
这种方法的关键在于构建很长的sql语句。
3.如果有码友发现自己的Java代码插入数据特别慢,那就看这一条
Connection con = null; con = DriverManager.getConnection(url,username,userpasswd); con.setAutoCommit(false);
如第三行代码所示,把自动提交关掉,这一点很重要。
4.使用batch
如下面代码所示,每1000条数据作为一个batch
String finalsql = "insert into news (news_title,news_date,news_tag,news_reporter,news_src) values (?,?,?,?,?);"; statemenet = con.prepareStatement(finalsql); File file = new File("files/news.txt"); BufferedReader reader = null; reader = new BufferedReader(new FileReader(file)); String tempString = null; int count = 0; final int batchSize = 1000; while ((tempString = reader.readLine()) != null) { statemenet.setString(1, news_title); statemenet.setString(2, news_date); statemenet.setString(3, news_tag); statemenet.setString(4, news_reporter); statemenet.setString(5, news_src); statemenet.addBatch(); if(++count % batchSize == 0) { statemenet.executeBatch(); } }
自行加上try catch代码。
5.
笔者个人的机器,100万条数据,用第一种方法,也就是从文件读取,耗时6秒。
普通方法读取10万条数据,耗时10多秒。

浙公网安备 33010602011771号