Реализация кеша запросов в SQLite - PullRequest
0 голосов
/ 23 сентября 2019

Есть ли в SQLite понятие кеша запросов?Например, если я выполню один и тот же запрос два раза подряд:

select * from Sales1m group by territory_id;
select * from Sales1m group by territory_id;

Результат: 136 строк возвращено за 6663 мс

Результат: 136 строк возвращено за 6745 мс

Это занимает примерно то же самое время, даже если установлено значение PRAGMA cache_size=-1000 (1 МБ).

Получает ли второй запрос выгоду от первого запроса вообще?Если ответ «нет», насколько сложно будет реализовать кэш запросов на стороне клиента?Я предполагаю, что наивная реализация могла бы использовать контрольную сумму строки запроса и набор результатов (потенциально сжатый?), Но тогда она также должна была бы аннулировать всякий раз, когда таблицы обновляются.

1 Ответ

1 голос
/ 23 сентября 2019

AFAIK SQLite не имеет встроенного кеша запросов.Вы должны добавить один на прикладном уровне, вероятно, используя ORM , который обеспечивает кэш запросов.

Что он делает, так это кэширует страницы базы данных в памяти для более быстрого поиска.Вы можете настроить размер этого кэша с помощью прагмы cache_size .По умолчанию это 2000 кибибайт (2 мегабайта).Попробуйте что-то большее.Например, 20 000 КБ (20 мегабайт).

PRAGMA <your schema>.cache_size = -20000
...