SQLite批量插入优化措施

SQLite的数据库本质上来讲就是一个磁盘上的文件,所以整个的数据库操作实际都会转接为对文件的操作,而往往的文本操作将会是一个很好时的经过,会大幅度地影响数据库存取的快慢。

 

比如:向数据库中插入100万条数据,在默许的状态下一旦单单是执行 
sqlite3_exec(db, “insert into name values ‘lxkxf’, ‘24′; ”, 0, 0,
&zErrMsg); 
将会再次的开辟关闭数据库文件100万次,所以速度自然会很慢。因而对于那种情状大家相应运用“事务”。 
具体方法如下:在实践SQL语句以前和SQL语句执行达成之后加上 
rc = sqlite3_exec(db, “BEGIN;”, 0, 0, &zErrMsg); 
//执行SQL语句 
rc = sqlite3_exec(db, “COMMIT;”, 0, 0, &zErrMsg);

诸如此类SQLite将把一切要实践的SQL语句先缓存在内存当中,然后等到COMMIT的时候几回性的写入数据库,那样数据库文件只被打开关闭了四次,功效自然大大的增高。有一组数据相比较:

测试1: 1000 INSERTs 
CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100)); 
INSERT INTO t1 VALUES(1,13153,’thirteen thousand one hundred fifty
three’); 
INSERT INTO t1 VALUES(2,75560,’seventy five thousand five hundred
sixty’); 
… 995 lines omitted 
INSERT INTO t1 VALUES(998,66289,’sixty six thousand two hundred eighty
nine’); 
INSERT INTO t1 VALUES(999,24322,’twenty four thousand three hundred
twenty two’); 
INSERT INTO t1 VALUES(1000,94142,’ninety four thousand one hundred forty
two’); 
SQLite 2.7.6: 
13.061 
SQLite 2.7.6 (nosync): 
0.223

测试2: 使用事务 25000 INSERTs 
BEGIN; 
CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100)); 
INSERT INTO t2 VALUES(1,59672,’fifty nine thousand six hundred seventy
two’); 
… 24997 lines omitted 
INSERT INTO t2 VALUES(24999,89569,’eighty nine thousand five hundred
sixty nine’); 
INSERT INTO t2 VALUES(25000,94666,’ninety four thousand six hundred
sixty six’); 
COMMIT; 
SQLite 2.7.6: 
0.914 
SQLite 2.7.6 (nosync): 
0.757

足见使用了业务之后却是极大的增高了数据库的频率。不过大家也要留心,使用工作也是有早晚的开支的,所以对于数据量很小的操作可以不必拔取,以防造成而外的消耗。

 

internalstaticvoid FastInsertMany(DbConnection cnn)

{

using (DbTransaction dbTrans = cnn.BeginTransaction())

{

using (DbCommand cmd = cnn.CreateCommand())

{

    try

   {

cmd.CommandText = "INSERT INTO TestCase(MyValue) VALUES(?)";

DbParameter Field1 = cmd.CreateParameter();

cmd.Parameters.Add(Field1);

for (int n = 0; n < 100000; n++)

{

Field1.Value = n + 100000;

cmd.ExecuteNonQuery();

}

}

  dbTrans.Commit();

   }

   catch

   {

     dbTrans.RollBack();

   }

}

}

 

网站地图xml地图