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多秒。

 

posted @ 2014-05-21 15:07  好又多牛肉  阅读(126)  评论(0)    收藏  举报