最近我向我的sqlite数据库循环了1000 000行数据,我的Netbeans编译器花了 2367 分钟(39小时)来完成数据的处理。
我使用For循环进行循环过程,我想知道是否有任何有效且更快的练习让程序循环得比这快得多。
目前我正在使用这个简单的for循环作为我的代码。
for(i = 0; 1 < 1000000; i ++){
//code to insert 1 row of data to sqlite database
}
根据我对here的研究,while循环和迭代器循环不会导致与for循环相比有任何显着的性能。
有人可以帮我这个,我真的很感激。
答案 0 :(得分:2)
for循环本身并不昂贵,但是如果您要将很多行插入数据库,则应使用事务,这会将插入调用分组到一个调用中。否则,分别添加1,000,000行会产生很大的I / O成本。
BEGIN TRANSACTION;
INSERT ...;
COMMIT TRANSACTION;
答案 1 :(得分:2)
我认为问题是您正在尝试为每个循环创建连接,或者尝试为每次迭代执行insert语句,请考虑使用批处理。每5000或10000插入批次插入:
String sql = "insert into employee (name, city, phone) values (?, ?, ?)";
Connection connection = new getConnection();
PreparedStatement ps = connection.prepareStatement(sql);
for (Employee employee: employees) {
ps.setString(1, employee.getName());
ps.setString(2, employee.getCity());
ps.setString(3, employee.getPhone());
ps.addBatch();
}
ps.executeBatch();