2012-02-23 17 views
1

iphoneでsqliteを使用しています。 200000レコードのテーブルがあります。サイズは小さく、わずか2 MBです。私は2つの簡単な条件で標準的なselect(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]; 

    } 
} 
+2

目に見えないコードを改善するのは難しいです.... – Till

答えて

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、時、分?

+0

申し訳ありませんこのサイトのコードではテーブル名が不足しています。プログラムで私は正しいです。私はidPolaczeniaのためにいくつのレコードを取得し、クエリでLIMITを与えることができるかについての追加情報を得ようとします。パフォーマンスが向上すると思います。 – kolek

関連する問題