簡體   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