@Crunkor

Сколько записей загружает View?

В СУБД PostgreSQL у меня есть множество таблиц.
Я создаю view, допустим somedata, которое состоит из
select a.col1, b.col2, c.col3, ....
from a
left join b on a.id=b.id
.......

Какой-то сложный запрос, который выводит огромное количество записей.
Теперь у меня возник вопрос, а сколько записей будут загружаться в память, если я выполню такой запрос ?
select * from somedata where col2 = 10
Будет ли он сначала загружать все данные, из всех таблиц, в somedata и уже потом фильтровать их по условию или СУБД уже сразу выполнит запрос view с указанным условием?
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега PostgreSQL
Седой и строгий
В случае обычного представления ваш select * from somedata where col2 = 10 грубо говоря развернётся в запрос, формирующий представление. В случае материализованного, чтение будет осуществляться так же, как из обычной таблицы. Так что в обоих случаях в память будет загружено не больше записей, чем нужно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
Выполните explain и узнаете. Будет видно и как глубоко ушли условия, и замену left join на inner join, и, вероятно, обратный порядок объединения таблиц.
view для планировщика прозрачен и планируется заново всё дерево запроса.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы