Прежде чем пометить этот вопрос как дубликат, ПОЖАЛУЙСТА, СЛЫШИТЕ МНЕ !!
Я уже прочитал заданные здесь вопросы о том, как улучшить производительность, например. просто упомянуть несколько Улучшение производительности SQLite по INSERT-в-секунду? и Каковы характеристики производительности sqlite с очень большими файлами базы данных?
Я пытаюсь заставить sqlite работать с размером файла базы данных 5 гигабайт. Наоборот, есть люди, которые утверждают, что sqlite работает для них «отлично», даже если размер базы данных достигает 160 ГБ. Я сам не пробовал, но, исходя из заданных вопросов, я полагаю, что все тесты могут быть выполнены только с таблицей в базе данных.
Я использую базу данных с
- 20 или около того таблиц
- Половина таблиц имеет более 15 столбцов
- Каждая из этих 15-или около-столбцов таблиц имеет 6/7 столбцов внешнего ключа
- Некоторые из этих таблиц уже выросли до 27 миллионов записей в месяц
Машина для разработки, которую я использую, представляет собой четырехъядерный процессор с частотой 3 ГГц и 4 гигабайтами оперативной памяти, и все же для запроса row_count в этих больших таблицах требуется более 3 минут.
Я не нашел способа разделить данные по горизонтали. Лучший вариант, который у меня есть, - разделить данные по нескольким файлам базы данных, по одному для каждой таблицы. Но в этом случае, насколько мне известно, ограничения столбца внешнего ключа не могут быть использованы, поэтому мне придется создать самодостаточную таблицу (без каких-либо внешних ключей).
Так что мои вопросы
а) Я использую неверную базу данных для работы?
б) Что вы думаете, где я иду не так?
c) Я еще не добавил индексы для внешних ключей, но если запрос количества строк занимает четыре минуты, как мне помогают индексы внешних ключей?
EDIT
Чтобы предоставить больше информации, хотя никто не просил об этом :)
Я использую SQLite версии 3.7.9 с system.data.sqlite.dll версии 1.0.77.0
EDIT2:
Я думаю, что я отличаюсь от парней из 160 гигов в том, что они могут выбрать отдельную запись или небольшой диапазон записей. Но мне нужно загрузить все 27 миллионов строк в моей таблице, соединить их с другими таблицами, сгруппировать записи по запросу пользователя и вернуть результаты.
Любая информация о том, как лучше оптимизировать базу данных для таких результатов.
Я не могу кэшировать результаты предыдущего запроса, так как в моем случае это не имеет смысла. Вероятность попадания в кеш будет довольно низкой.