У нас около 7-8 таблиц в нашем Android-приложении, каждый из которых имеет около 8 столбцов в среднем. Операции чтения и записи выполняются в базе данных, и я экспериментирую и пытаюсь найти способы повышения производительности уровня DataAccess. Итак, я пробовал следующее:
- Используйте позиционные аргументы в разделах where (Причина: так, чтобы sqlite использовал один и тот же план выполнения)
- Включение и обновление транзакций (причина: каждая операция db включена в транзакцию по умолчанию. Выполнение этого приведет к удалению этих служебных данных).
- Индексирование: я не создал никакого явного индекса, кроме тех, которые были созданы по умолчанию для столбцов первичного ключа и уникальных ключей. (Причина: индексирование улучшит время поиска)
Я упомянул о своих предположениях в paranthesis; пожалуйста, исправьте меня, если я ошибаюсь.
Вопросы:
-
Могу ли я добавить что-нибудь еще в этот список? Я где-то читал, что избежать использования db-журнала может повысить производительность обновлений? Это миф или факт? Как это можно сделать, если их рекомендовать?
-
Разрешены ли вложенные транзакции в SQLite3? Как они влияют на производительность? Дело в том, что у меня есть функция, которая запускает обновление в цикле, поэтому я включил цикл в блок транзакций. Иногда эта функция вызывается из другого цикла внутри некоторой другой функции. Вызывающая функция также охватывает цикл внутри блока транзакций. Как такое вложение транзакций влияет на производительность?
-
В предложениях where для моих запросов используется несколько столбцов для создания предиката. Эти столбцы могут не обязательно иметь первичный ключ или уникальные столбцы. Должен ли я создавать индексы на этих столбцах? Это хорошая идея создать несколько индексов для такой таблицы?