powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Кеширование подзапроса для последовательности транзакций
7 сообщений из 7, страница 1 из 1
Кеширование подзапроса для последовательности транзакций
    #39160829
Igor Lazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Стоит такая задача. Последовательно выполняются 4 запроса к БД в разных транзакциях (каждый обернут в транзакцию - это критично). Внутри каждого из этих запросов есть одинаковый подзапрос. Вопрос - как добиться гарантированного кеширования этого подзапроса для уменьшения общего времени выполнения задачи?

Версия PostgreSQL 9.4

Дело в том, что на одной БД вроде как ускорение происходит, а на другой - нет.

Текст запроса примерно следующий

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
BEGIN;
DECLARE curs_countries CURSOR FOR
SELECT *
FROM (
     SELECT DISTINCT ON (sc.id) sc.id, sc.name...
     FROM suggest_term st
     INNER JOIN suggest_country sc ON (st.country = sc.id)
     WHERE {$condition}
     ORDER BY sc.id, sc.name, rank DESC
) AS t
ORDER BY rank DESC;
MOVE FORWARD {$offset} IN curs_countries;
FETCH {$limit} FROM curs_countries;
MOVE BACKWARD ALL IN curs_countries;
MOVE FORWARD ALL IN curs_countries;
COMMIT;



Может показаться, что тут нет подзапроса, но планировщик не показывает разницы с вариантом, если обращение к таблице suggest_term обернуть в подзапрос.


Один из вариантов решения проблемы, который я вижу - использование временных таблиц. Т.е. прежде, чем выполнять основные запросы, сделать выборку внутреннего подзапроса во временную таблицу. После выполнения запросов, удалить ее. Вопрос - не будет ли создана сильная нагрузка на БД из-за временных таблиц? Будут ли временные таблицы храниться только в оперативной памяти?

Может быть у вас есть другие варианты решения проблемы?
...
Рейтинг: 0 / 0
Кеширование подзапроса для последовательности транзакций
    #39160906
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Lazarevдругие варианты решения
в одной транзакции будет гарантия последовательного
...
Рейтинг: 0 / 0
Кеширование подзапроса для последовательности транзакций
    #39160925
Igor Lazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123, тогда не получится одновременно вытаскивать кол-во записей и фильтрованные данные.
...
Рейтинг: 0 / 0
Кеширование подзапроса для последовательности транзакций
    #39160941
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Lazarev(каждый обернут в транзакцию - это критично).
я вот это не понял.
Я не знаю как тут работает оптимизатор в данной БД.
Но, либо делать всё в одном соединении и одной транзакции, либо параллельно в разных, но тогда от клиента зависит. Что он делает с 4-мя параллельными запросами. (результатами).
...
Рейтинг: 0 / 0
Кеширование подзапроса для последовательности транзакций
    #39161433
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Lazarev,

Кэшируются не подзапросами, а данные, которые они обрабатывают.
ответ - никак, и в то же время - ничего делать не нужно, данные уже закэшированы, при условии, что кэш большой, данные использования одни и те же, и все такое.
...
Рейтинг: 0 / 0
Кеширование подзапроса для последовательности транзакций
    #39161434
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[i]Может показаться, что тут нет подзапроса, но планировщик не


есть тут или нет под запросы - совсем неважно.

Один из вариантов решения проблемы, который я вижу - использование временных таблиц.


не пойдет, у тебя разные транзакции...
...
Рейтинг: 0 / 0
Кеширование подзапроса для последовательности транзакций
    #39161516
Sergei.Agalakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да никак. Четыре разные транзакции в общем случае получат четыре разных ответа на эти подзапросы. Данные-то между запросами могут быть модифицированы другими клиентами.
Materialized view можно попробовать соорудить, если есть надежда, что данные подзапроса в основном статичные.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Кеширование подзапроса для последовательности транзакций
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]