В Oracle операторы SQL будут кэшироваться в shared_pool, а часто используемые данные будут кэшироваться в db_cache.
Что делает PostgreSQL? Будут ли кэшироваться операторы SQL и данные в shared_buffers?
Ответ 1
Как правило, только содержимое табличных и индексных файлов будет кэшироваться в общем пространстве буфера.
Планы запросов кэшируются в некоторых случаях. Лучший способ обеспечить это - ПОДГОТОВИТЬ запрос один раз, а затем EXECUTE его каждый раз.
Результаты запроса не будут автоматически кэшироваться. Если вы повторите один и тот же запрос, даже если он буквенный для письма идентичен, и никаких обновлений не было выполнено в БД - он все равно выполнит весь план. Разумеется, он будет использовать любые данные таблицы/индекса, которые уже находятся в кэше разделяемых буферов; поэтому ему не обязательно снова будет считывать все данные с диска.
Обновление кэширования плана
Планирование кэширования обычно выполняется за сеанс. Это означает только соединение, которое заставляет план использовать кешированную версию. Другие соединения должны создавать и использовать свои собственные кешированные версии. Это не проблема производительности, поскольку экономия, получаемая от повторного использования плана, почти всегда минимальна по сравнению со стоимостью подключения в любом случае. (Если ваши запросы действительно сложны.)