菜单

SQLite优化方法

2018年11月16日 - sqlite

具体方法如下:在尽SQL语句之前跟SQL语句执行完毕后加上

 

SQLite 2.7.6:
13.061

 

譬如:向数据库被插100万漫漫数据,在默认的场面下而只是履行

测试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

sqlite3_exec(db, “insert into name values ‘lxkxf’, ‘24′; ”, 0, 0,
&zErrMsg);

这般SQLite将将全如推行之SQL语句先缓存在内存当中,然后等交COMMIT的时光一次性的勾副数据库,这样数据库文件才吃辟关闭了一如既往次等,效率自然大大的增长。有同一组数相比:

rc = sqlite3_exec(db, “COMMIT;”, 0, 0, &zErrMsg);

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();

   }

}

}

测试2: 使用事务 25000 INSERTs

比如:向数据库中插入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的下一次性的写照副数据库,这样数据库文件就为打开关闭了平差,效率自然大大的滋长。有相同组数据对比:

足见使用了政工之后倒是高大的增进了数据库的频率。但是我们吧如留心,使用工作也是出得的开支的,所以于数据量很粗之操作可以不要下,以免导致而外的耗费。

SQLite 2.7.6:
0.914

 

SQLite 2.7.6 (nosync):
0.757

测试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

足见使用了事情之后倒是宏大的滋长了数据库的效率。但是咱呢要是注意,使用工作也是来自然之开销的,所以对数据量很粗的操作可以不要下,以免造成而外的损耗。

SQLite的数据库本质上来讲就是是一个磁盘上之公文,所以全的数据库操作实际都见面转接为对文本的操作,而数的文本操作将会晤是一个生好经常的历程,会大地震慑数据库存取的进度。

而或许感兴趣的篇章:

SQLite 2.7.6 (nosync):
0.223

拿会再也的开辟关闭数据库文件100万糟,所以速度自然会格外缓慢。因此对于这种情形咱应当利用“事务”。

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’);

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;

//执行SQL语句

rc = sqlite3_exec(db, “BEGIN;”, 0, 0, &zErrMsg);

测试1: 1000 INSERTs

相关文章

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图