发布网友
共3个回答
热心网友
//最快的方法 10000记录 23MS
public static void insert() {
// 开时时间
Long begin = new Date().getTime();
// sql前缀
String prefix = "INSERT INTO tb_big_data (count, create_time, random) VALUES ";
try {
// 保存sql后缀
StringBuffer suffix = new StringBuffer();
// 设置事务为非自动提交
conn.setAutoCommit(false);
// Statement st = conn.createStatement();
// 比起st,pst会更好些
PreparedStatement pst = conn.prepareStatement("");
// 外层循环,总提交事务次数
for (int i = 1; i <= 100; i++) {
// 第次提交步长
for (int j = 1; j <= 10000; j++) {
// 构建sql后缀
suffix.append("(" + j * i + ", SYSDATE(), " + i * j
* Math.random() + "),");
}
// 构建完整sql
String sql = prefix + suffix.substring(0, suffix.length() - 1);
// 添加执行sql
pst.addBatch(sql);
// 执行操作
pst.executeBatch();
// 提交事务
conn.commit();
// 清空上一次添加的数据
suffix = new StringBuffer();
}
// 头等连接
pst.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
// 结束时间
Long end = new Date().getTime();
// 耗时
System.out.println("cast : " + (end - begin) / 1000 + " ms");
}
热心网友
可以考虑做一个缓存,将要写入的数据先写到缓存里面,当缓存达到一定的阈值再一次性写入Mysql,这样避免了小数据量的频繁写入和读取,对mysql的性能能起到很大的提升。
热心网友
给你提供几种方法:
第一种:你可以利用foreach循环插入数据
第二种:你可以批量插入数据库,例如:
INSERT INTO `table` (`name`, `content`, `sex`)
VALUES ( 'xiaoming','测试','男'), ('xiaohong', '测试1', '女');
这种批量插入效率比较好。循环的话,如果数据量较小可以,一旦数据量较大那么性能就会降低。你可以测试下