Как я могу ускорить или оптимизировать этот запрос SQLite для iOS? - PullRequest
2 голосов
/ 03 февраля 2012

У меня довольно простая структура БД.У меня есть 12 столбцов в одной таблице, большинство из них varchar (<50), с примерно 8500 строками. </p>

Когда я выполняю следующий запрос на iPhone 4, я получаю в среднем 2,5-3 секунды для результатов:

SELECT * FROM names ORDER BY name COLLATE NOCASE ASC LIMIT 20

Не похоже, что подобные вещи должны быть такими медленными.Интересно, что тот же запрос из того же приложения, запущенного на iPod второго поколения, быстрее примерно на 1,5 секунды.Эта часть за мной.

У меня есть другие вопросы, которые имеют ту же проблему: SELECT * FROM names WHERE SEX = ?1 AND ORIGIN = ?2 ORDER BY name COLLATE NOCASE ASC LIMIT 20

и

SELECT * FROM names WHERE name LIKE ?3 AND SEX = ?1 AND ORIGIN = ?2 ORDER BY name COLLATE NOCASE ASC LIMIT 20

и т. Д.

Я добавил индекс в базу данных SQLite: CREATE INDEX names_idx ON names (name, origin, sex, meaning), где name, origin, sex и meaning - столбцы, к которым я склонен выполнять запросы с помощью WHERE и LIKE операторы.

Есть какие-нибудь мысли по поводу улучшения производительности этих поисков или это настолько атомарно, насколько это возможно?

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

Индекс CREATE INDEX names_idx ON names (name, origin, sex, meaning) будет использоваться, я полагаю, только если ваш запрос включает ВСЕ эти столбцы. Если в запросе используются только некоторые из них, индекс нельзя использовать.

Продолжаем ваш первый запрос: SELECT * FROM names ORDER BY name COLLATE NOCASE ASC LIMIT 20 - я бы предложил добавить индекс по имени, сам по себе, т.е. CREATE INDEX names_idx1 ON names (name). Теоретически это должно ускорить этот запрос.

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

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

Какой критерий поиска наиболее часто используется?например, если вы ищете имена, вы можете создать больше таблиц в соответствии с инициалами имен.Таблица для имен, которые начинаются с "A" и т. Д. То же самое для жанра.В некоторых случаях это повысит эффективность поиска.

...