Повысить производительность Sqlite DB на iOS, определив индексы? - PullRequest
1 голос
/ 25 февраля 2011

Моя таблица представляет собой иерархическую структуру со следующими столбцами:

int ID (PK, unique, not null)
int ParentID 
int MasterID (not null)
smallint Type (not null)
varchar(255) Name

Мне нужно запросить эту БД по:

  • Получение одной записи с помощью идентификатора
  • Получение всех дочерних элементов элемента (запрос по ParentID и ограничение одним конкретным MasterID)
  • Получение всех дочерних элементов определенного типа

Какие индексы я бы определил предпочтительно для этогоSqlite DB?Также примечательно: мне нужно добавить несколько записей (удалить все, что принадлежит определенному MasterID, а затем вставить около 20000 строк).Я думаю, что определение многих индексов снизит производительность, верно?В настоящее время я вставляю 500 записей за раз и оборачиваю их в «BEGIN» и «END».

Кроме того, какие другие настройки я должен применить к БД, особенно в сценарии iOS?

1 Ответ

1 голос
/ 25 февраля 2011

Какие индексы вы определяете, будут напрямую зависеть от того, какие клавиши вы ищете.Как правило, все в отношениях (внешние ключи) будет хорошим местом для индекса.На первый взгляд, я бы посоветовал проиндексировать ваши типы данных int, потому что это недорого.Имейте в виду, однако, только индекс, если он добавляет производительность.В этом случае тестирование - это путь.

Вы можете добавить индексы, и у вас получится, что это только замедляет вас (индексы замедляют операции записи, но никогда не замедляют чтение).Лучше всего тестировать в различных конфигурациях.Там нет всеобъемлющего для того, как создавать индексы.Если вы разместите запросы, которые вы выполняете, мы могли бы дать немного больше информации.

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

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