繁体   English   中英

如何在db.execSql中的sqlite android中加快查询速度

[英]How to speed up queries in sqlite android in db.execSql

我有以下代码用于在数据库中输入数据。

public static void execSql(SQLiteDatabase db, String sql)
{
    String[] parts = sql.split(";");
    for (String entry : parts) {
        db.execSQL(entry);
    }   
}

最初在sql字符串中所有“ INSERT ......”,然后执行每个插入循环。 总插入数为22908。数据输入大约需要4分钟,我认为这是很长的时间。 数据为7,95 MB。 有什么办法可以加快介绍速度,并缩短到几秒钟?

INSERT INTO location ( 'latitude' , 'updated' , 'id' , 'longitude' , 'created' ) VALUES( '213.2000000' , '2014-08-25 11:07:42+00:00' , '1' , '321.0000000' , '2014-08-25 11:07:42+00:00' );
INSERT INTO location ( 'latitude' , 'updated' , 'id' , 'longitude' , 'created' ) VALUES( '42.7191000' , '2014-09-17 12:53:49+00:00' , '2' , '23.0834000' , '2014-09-17 12:53:49+00:00' );
......................

这是数据sql变量。

将工作包装在事务中:

db.beginTransaction();

try {
  // your SQL goes here
  db.setTransactionSuccessful();
}
finally {
  db.endTransaction();
}

现在,您正在为每个SQL语句执行一个事务,这非常慢。 每个事务都涉及磁盘I / O,与成千上万个小磁盘I / O相比,执行一大批磁盘I / O效率要高得多。

使用准备好的语句也将逐渐有所帮助。

您正在执行仅具有不同参数值的同一查询。 这就是为什么您可以利用预编译的sql语句的原因。 您可以创建PreparedStatement对象,然后可以使用该对象多次有效地执行您的插入语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM