数据库插入花费太多时间ios sqlite

时间:2014-01-21 12:22:47

标签: ios sqlite

我试图在sqlite数据库中插入大约500条记录,这需要20秒,这太过分了!任何人都可以告诉你如何优化它。

for (int i = 0 ; i< [[[dic objectForKey:@"response" ]objectForKey:@"requete"]count]; i++) {
        [sqlManager executeQuery:[[[dic  objectForKey:@"response"]objectForKey:@"requetes"]objectAtIndex:i]];
    }

-(void)executeQuery:(NSString*)_query
{
sqlite3 *database;
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {

    if(sqlite3_exec(database, [_query UTF8String],NULL, NULL, NULL) == SQLITE_OK){
        //NSLog(@"Query Success");
    }
    else{
       // NSLog(@"Query Failed");
    }
    sqlite3_close(database);
}
sqlite3_close(database);
}

3 个答案:

答案 0 :(得分:1)

您即将Open & closing the database for every Query(insertion)。所以这也需要时间。

example一次插入多条记录。

答案 1 :(得分:1)

  1. 打开一次并保持打开状态,直到应用程序关闭或您完成数据库密集阶段。如果您的应用程序在数据库打开时“崩溃”,SQLite可以轻松处理这种情况。
  2. 当多个插入物靠近在一起时,如果它们全部去或者没有一个去,那就好了,启动一个事务(并在完成时提交它)。当您没有显式启动事务时,SQLite会在每次插入或更新时执行隐式启动/提交,“强制”将数据“转换为”磁盘“。这需要很多时间。在一堆插入物周围进行一次启动/提交将使插入性能提高至少10倍。

答案 2 :(得分:0)

我认为你必须开放你的数据库。

需要更多时间才能打开和关闭数据库。

例如,仅为该插入创建一个方法,该方法在firts元素中打开数据库并在最后一个元素之后关闭它。