0

我的 sqlite 表中有 10000 条记录。加载到数组中需要 3 多分钟。我怎样才能加快这个过程。有什么办法可以将时间减少到至少一半?

我的代码:

NSString *qry=[NSString stringWithFormat:@"select * from employees"];
    const char *sql=(char *)[qry UTF8String];
    if (sqlite3_prepare_v2(database, sql, -1, &selectstmt,NULL) != SQLITE_OK) {
        NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
    }
    if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {
        Vertex *objVertex = [[Vertex alloc] init];
        int counterIndex=0;
         while(sqlite3_step(selectstmt) == SQLITE_ROW){
            objVertex.vid=sqlite3_column_int(selectstmt, 0);
            objVertex.lat=sqlite3_column_double(selectstmt, 1);
            objVertex.lon=sqlite3_column_double(selectstmt, 2);
            objVertex.alt=sqlite3_column_double(selectstmt, 3);
            objVertex.assoc_type=[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 4)];
            objVertex.assoc_id=sqlite3_column_int(selectstmt, 5);
            objVertex.link=[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 6)];
            objVertex.bf=sqlite3_column_int(selectstmt, 7);
            
             [appdel.dicVertexEntry setObject:[NSString stringWithFormat:@"%d",counterIndex] forKey:[NSString stringWithFormat:@"%d",objVertex.vid]];
             // do pass vertex to Algo
             counterIndex++;
        
        }
        [[NSUserDefaults standardUserDefaults]setObject:appdel.dicVertexEntry forKey:@"VertexData"];
        [[NSUserDefaults standardUserDefaults]synchronize];

    }

提前致谢。

4

2 回答 2

0

更好的解决方案是,如果您从 100 条或一些固定数量的记录开始获取,然后滚动获取下 100 条记录。这将加快您的速度。

要优化查询,您可以仅从查询中获取必填字段,而不是使用 * 获取所有字段。

于 2012-10-29T09:53:48.097 回答
0

您可以尝试在 SQL 语句中显式指定您需要的字段名称,而不仅仅是使用 *,这应该会给您带来轻微的性能提升。您是否考虑过使用 Core Data 而不是 sqlite direct?

于 2012-10-09T11:49:08.610 回答