Как быстро запросить записи, соответствующие списку строк?У меня есть запрос в моем приложении для iOS, который выглядит следующим образом:
SELECT rowid, category_id
FROM items
WHERE rowid in (2, 4, 89, 4243, 44, 555, ...)
Список строк может быть несколько длинным - несколько сотен элементов будет типичным примером.
Странная вещьв том, что этот запрос выполняется несколько секунд - в некоторых случаях до 12 секунд.Это медленно, независимо от того, запускаю ли я его в оболочке SQLite или запускаю в своем приложении.
Однако, если я заменю этот запрос просто:
SELECT rowid, category_id
FROM items
, поэтому я получаю КАЖДЫЙ элемент втаблица (в моем тестовом примере около 1000 строк) и просто мое приложение игнорирует ненужные ей строки, запрос выполняется всего за несколько сотен миллисекунд.Он также быстро реагирует на оболочку SQLite.
Что здесь происходит?rowid
- это первичный ключ, поэтому это должен быть быстрый индексированный поиск.Есть ли более быстрый способ выполнения таких запросов?Я бы подумал, что разбор строки запроса имеет значение, но профилирование показывает, что почти все время тратится на sqlite3_step
.