Советы по оптимизации базы данных sqlite с большим количеством данных в нем?

Я работаю с более крупной базой данных sqlite (для использования как на окнах, так и на linux), и я стараюсь максимизировать производительность, которую я получаю. База данных должна быть установлена ​​на товарном оборудовании вместе с sqlite gui. Пользователи, которым я доставляю это, являются sql savvy, но вряд ли возьмутся за свои собственные оптимизации (создание индексов, настройка прагмы и т.д.), Поэтому я заинтересован в том, чтобы как можно больше использовать производительность в ящике (чтобы обеспечить максимальное использование данные).

Одна проблема Windows, похоже, затухает выполнение запросов гораздо больше, чем Linux, а другая заключается в том, что я менее знаком с подходом sqlite к индексированию (по сравнению с другими базами данных, такими как postgres).

Ответ 1

Вы читали часто задаваемые вопросы оптимизации SQLite (несколько лет, но все же кажется полезным)?

Я не думаю, что 1gb особенно большой, даже для SQLite. Он, безусловно, может обрабатывать значительно большие базы данных.

Ответ 2

Обновление - мы добились наибольшего успеха благодаря более интеллектуальному упорядочению данных во время импорта, агрессивной индексации (более чем удваивая размер файла db в процессе), настройке настроек в Windows, чтобы заставить XP вести себя более как сервер, чем рабочий стол, изменяя порядок соединений (вы не можете полагаться исключительно на оптимизатор) и путем измерения вашего прогресса, создав набор тестов производительности (просто проводку для выполнения запросов и измерения).

Опыт был забавным, и конечные пользователи довольны и могут работать с данными.

Ответ 3

Если вы делаете большой импорт данных, я нашел, что наиболее эффективным способом было

  • Закажите свои вставленные данные предпочтительно в первичной индексной последовательности
  • Использовать подготовленные операторы (doh)
  • Отбросить любые индексы
  • Вставьте данные навалом, завернутые в транзакции (например, 10 000 записей в хит)
  • Добавьте указатели назад

также помните, что sqlite еще не поддерживает оператор or в предложении where. Вы можете изменить настройки, разделив предложение where, чтобы перейти к использованию ands.

Ответ 4

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