Очень медленный запрос, где в таблице много записей - PullRequest
1 голос
/ 24 февраля 2012

Я использую sqlite на iphone. У меня есть таблица с 200 000 записей. Размер небольшой, всего 2 МБ. Я делаю стандартный выбор (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 Ответ

1 голос
/ 24 февраля 2012

Похоже, в вашем 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, час и минута?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...