查询非常慢,其中表有很多记录

时间:2012-02-23 21:59:29

标签: iphone database performance ipad sqlite

我在iphone上使用sqlite。 我有20万条记录。它的体积很小,只有2 MB。我正在做标准选择(3个列),有两个简单的条件。我只对整数值进行操作(作为回报和条件)。所有数据都是独特的。我通常只从数据库获得10-50条记录。

尽管我的查询需要3秒。这是很多时间。 我怎么能改善这个?

编辑:我无法用其他线程加载我的表。

NSString * query = [ NSString stringWithFormat:@"SELECT rRozklad.hour, rRozklad.minute, rRozklad.marks FROM  rRozklad.idOkres=%i AND rRozklad.idPolaczeniaLinie=2 ORDER by rRozklad.hour, rRozklad.minute", okres];

NSLog(@"%@", query);

const char * querystring = [ query UTF8String ];
sqlite3_stmt * statment;

if(sqlite3_prepare_v2(database, querystring, -1, &statment, nil) == SQLITE_OK){
    while(sqlite3_step(statment) == SQLITE_ROW){
        NSMutableArray * temp = [[NSMutableArray alloc] initWithCapacity:2];
        [temp addObject:[NSNumber numberWithInt: sqlite3_column_int(statment, 0)]];
        [temp addObject:[NSNumber numberWithInt: sqlite3_column_int(statment, 1)] ];
        [temp addObject:[ NSString stringWithUTF8String: (const char *)sqlite3_column_text(statment, 2)]];

        [wyniki addObject:temp];
        [temp release];

    }
}

1 个答案:

答案 0 :(得分:1)

看起来您的SQL缺少表名和WHERE关键字。

SELECT rRozklad.hour, rRozklad.minute, rRozklad.marks
FROM  rRozklad.idOkres=%i AND rRozklad.idPolaczeniaLinie=2
ORDER by rRozklad.hour, rRozklad.minute

您的列是否已编入索引?特别是idOkres,idPolaczeniaLinie,小时和分钟?