我的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];
}
提前致谢。
答案 0 :(得分:0)
您可以尝试在SQL语句中明确指定所需的字段名称,而不是仅使用*,这样可以使性能略有提高。您是否考虑过使用Core Data而不是sqlite direct?
答案 1 :(得分:0)
更好的解决方案是,如果您获取起始100或一些固定数量的记录,并且在下一次滚动抓取100.这将加快您的速度。
要优化查询,您只能从查询中获取必需的字段,而不是全部使用*。