SQLite3 медленный анализ запросов - PullRequest
1 голос
/ 20 мая 2011

У меня длинный запрос, подобный следующему:

SELECT field1, field2, ... FROM tambe WHERE (rowid NOT IN (some 60000 rowids));

Потенциально запрос может выполняться несколько раз, поэтому я сохраняю его результаты во временной таблице.

CREATE TEMPORARY TABLE IF NOT EXISTS cache AS SELECT field1, field2, ... FROM tambe WHERE (rowid NOT IN (some 60000 rowids));

Таким образомМне не нужно каждый раз выбирать фактические данные, но они все еще немного медленнее, чем могли бы быть.Я подозреваю, что это время, которое требуется для анализа запроса, который замедляет его.

Есть ли способ инкапсулировать длинный запрос в виде оператора IF (CASE), чтобы синтаксический анализатор SQLite полностью игнорировалэто?

IF cache NOT EXISTS (...) END IF;

Спасибо.

1 Ответ

1 голос
/ 23 мая 2011

Выбор по rowid, по-видимому, не использует индекс. Использование выражения типа id NOT IN (some 60000 ids) почти наверняка не будет использовать индекс.

Я думаю, что вашей лучшей ставкой, вероятно, будет выбор ключа кандидата, который проиндексирован. Вы можете получить приемлемую производительность, не делая ничего, кроме этого.

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