今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时91秒+!
下面是他发给我的测试代码。我晕~~~~~~
1 SQLiteDatabase db = helper.getWritableDatabase(); 2 try 3 { 4 start = System.currentTimeMillis(); 5 db.beginTransaction();//我添加的 6 for (int i = 0; i < 1000; i++) 7 { 8 bastDao.insert(user, db); 9 } 10 time = System.currentTimeMillis() - start; 11 db.setTransactionSuccessful();//我添加的 12 } 13 catch (Exception e) 14 { 15 e.printStackTrace(); 16 } 17 finally 18 { 19 db.endTransaction();//我添加的 20 if (db != null) 21 { 22 db.close(); 23 } 24 }
执行一下,耗时1.5 秒。这差距是不是太大了点?
为什么只是简单启用了一个事务会有这么大的差距呢?很简单,SQLite 缺省为每个操作启动一个事务,那么原代码 1000 次插入起码开启了 1000 个事务,"事务开启 + SQL 执行 + 事务关闭" 自然耗费了大量的时间,这也是后面显示启动事务后为什么如此快的原因。其实这是数据库操作的基本常识,大家要紧记,不好的代码效率差的不是一点半点。