使用jdbc测了一下sqlite3的插入数据的效率,使用整体事务与不使用整体事务,差别非常明显。cpu:1G,内存:512MB
使用整体事务:1000000条记录,需要93秒钟。
使用逐个插入提交事务:1秒钟只能处理20条记录。
启动程序时把java堆最
使用jdbc测了一下sqlite3的插入数据的效率,使用整体事务与不使用整体事务,差别非常明显。 cpu: 1G,内存:512MB 使用整体事务:1000000条记录,需要93秒钟。 使用逐个插入提交事务:1秒钟只能处理20条记录。 启动程序时把java堆最大空间设大一些,不然可能出现内存不够的异常。 java -Xmx256M TestConn 测试后的结果显示如下:
以下是测试代码: import java.sql.*;
public class TestConn { void test(){ Connection conn = null; Statement stmt = null; ResultSet rset = null; System.out.println(new java.util.Date()); try { Class.forName("SQLite.JDBCDriver"); conn = DriverManager.getConnection( "jdbc:sqlite:/f:/test.db",//jdbc:oracle:thin:@hex:1521:ORCL "", ""); conn.setAutoCommit(false); stmt = conn.createStatement(); stmt.executeUpdate("create table hehe(id number,name varchar(32))"); System.out.println("建表hehe成功!"); for (int i=0; i<1000000; i++) { stmt.executeUpdate("INSERT INTO hehe VALUES("+i+",'我爱中国"+i+"')"); } conn.commit(); System.out.println("不建索引查询:"); System.out.println(new java.util.Date()); rset = stmt.executeQuery("SELECT id,name FROM hehe where id > 499999 and name ='我爱中国500001'"); if (rset.next()){ System.out.println(rset.getInt("id")); System.out.println(rset.getString("name")); } if (rset!=null){ rset.close(); rset = null; } System.out.println(new java.util.Date());
System.out.println("建索引:"); System.out.println(new java.util.Date()); stmt.executeUpdate("CREATE INDEX hehe_idx on hehe(id)"); stmt.executeUpdate("CREATE INDEX hehe_idx2 on hehe(name)"); conn.commit(); System.out.println(new java.util.Date()); System.out.println("建索引后的查询:"); System.out.println(new java.util.Date()); rset = stmt.executeQuery("SELECT id,name FROM hehe where id > 499999 and name = '我爱中国500001'"); if (rset.next()){ System.out.println(rset.getInt("id")); System.out.println(rset.getString("name")); } System.out.println(new java.util.Date()); stmt.executeUpdate("drop table hehe"); System.out.println("删除表hehe成功!"); conn.commit(); System.out.println(new java.util.Date());
} catch(ClassNotFoundException cnfe) { System.out.println("Can't find class for driver: "+cnfe.getMessage()); System.exit(-1); } catch (SQLException e){ System.out.println(e.getMessage()); System.exit(-1); } finally { try { if (rset!=null) rset.close(); stmt.close(); conn.close(); } catch (SQLException e) { } } }
public static void main(String[] args) { TestConn conn = new TestConn(); conn.test();}} (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|