在Titanium中通过使用BEGIN/COMMIT来加速SQLite插入操作
发布时间:2020-12-12 20:34:10 所属栏目:百科 来源:网络整理
导读:对于Titanium的性能一直是大家关心的一个问题,今天给大家分享一个提高往数据库中插入数据性能的方法:使用BEGIN/COMMIT。 一般我们在往数据库中插入数据的时候,通常的做法是: 1、打开DB var db = Ti.Database.open(); 2、执行插入语句 db.execute(); 3、
对于Titanium的性能一直是大家关心的一个问题,今天给大家分享一个提高往数据库中插入数据性能的方法:使用BEGIN/COMMIT。
一般我们在往数据库中插入数据的时候,通常的做法是: 1、打开DB var db = Ti.Database.open(); 2、执行插入语句 db.execute(); 3、关闭数据库 db.close(); 为大家介绍的技巧是: 在执行插入语句之前先执行db.execute('BEGIN;'); 在执行插入语句之后执行db.execute('COMMIT;'); 这样一来就能大幅提高数据库的插入性能。 我们拿Android版的应用来测试一下到底是否能提高性能,这里我们试着往数据库中插入1000件数据,看看一般的做法和使用了该技巧之后的执行速度有什么差距。 Ti.include("tracer.js"); // BEFORE var dbLog = tracer.createTracer('db'); dbLog.info('opening database'); var db = Ti.Database.open("TEST"); //db.execute("CREATE TABLE ITEM(ID integer,VALUE varchar(20))"); dbLog.info('deleting old items'); db.execute('DELETE FROM ITEM'); dbLog.info(db.rowsAffected + ' rows deleted'); dbLog.info('starting insert'); for( var i = 0; i < 1000; i++ ){ db.execute('INSERT INTO ITEM (ID,VALUE) VALUES(?,?)',i,'VALUE'+i); } dbLog.info( 'finished inserts' ); dbLog.info( 'closing database' ); db.close(); dbLog.info('database save complete'); // AFTER var dbLog2 = tracer.createTracer('db2'); dbLog2.info('opening database'); var db2 = Ti.Database.open("TEST"); dbLog2.info('deleting old items'); db2.execute('DELETE FROM ITEM'); dbLog2.info(db2.rowsAffected + ' rows deleted'); dbLog2.info('starting BEGIN'); db2.execute('BEGIN;'); dbLog2.info('starting insert'); for( var i = 0; i < 1000; i++ ){ db2.execute('INSERT INTO ITEM (ID,'VALUE'+i); } dbLog2.info( 'finished inserts' ); dbLog2.info( 'starting commit' ); db2.execute('COMMIT;'); dbLog2.info( 'finished commit' ); dbLog2.info( 'closing database' ); db2.close(); dbLog2.info('database save complete'); 执行结果如下: 可以明显的看出所花费的时间从 7670ms 变为了 1609ms,大概提高了7倍的速度。 很多人马上会问到为什么加了之后性能就提高了呢?其实大家查看 TiDatabaseProxy.java的源码你会发现,Titanium也只是将SQL的执行交给了Android来执行。所以归根结底还是Android系统的android.database.sqlite.SQLiteDatabase这个类的作用。 其中的tracer是一个输入LOG的库,示例代码也上传给大家 code.rar! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |