План объяснения SQL: что такое Materialise? - PullRequest
37 голосов
/ 12 июня 2010

Я попросил PostgreSQL объяснить мой запрос. Часть объяснения была:

table_name --> Materialize

Что делает материализация? Я объединяю две таблицы, а не представления или что-то в этом роде.

Ответы [ 4 ]

53 голосов
/ 13 июня 2010

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

Таким образом, в вашем случае планировщик определяет, что результат сканирования одной из ваших таблиц будетпомещается в памяти, и это позволяет выбирать операцию верхнего объединения, которая требует повторного сканирования, но при этом более дешевая.

7 голосов
/ 12 июня 2010

Это означает, что он не может использовать какой-либо индекс (или подобный метод), чтобы сделать соединение эффективным, поэтому в качестве последнего средства материализуется результат из одной из таблиц, чтобы иметь меньший набор для работы при объединении с другой стол.

0 голосов
/ 11 марта 2019

При объединении слиянием и соединении с вложенным циклом база данных будет "повторно сканировать" внутренний цикл. В основном как:

for each row in outer table:
    for each row in inner table:
        # do something

Планировщик материализует таблицу внутренних циклов, что означает загрузку всей таблицы в буфер в памяти, чтобы избежать дорогостоящей дисковой операции ввода-вывода.

Полезная ссылка .

0 голосов
/ 12 июля 2013

Можно сказать, что команда Materialize создаст View of a table (точно так же, как виртуальная таблица ИЛИ SnapShot таблицы в памяти)

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

ОсновноеПреимущество использования Materialize / Snap-Shot состоит в том, чтобы впоследствии снизить стоимость запроса к этой таблице.В плане выполнения то же самое говорится, что, какую выгоду мы можем получить, если мы используем материализацию, сравнить с тем, когда она не используется!

Объясните, чтобы проверить план исполнения

->  Materialize  (cost=0.29..8.51 rows=10 width=244)
         ->  Index Scan using tenk2_unique2 on tenk2 t2  (cost=0.29..8.46 rows=10 width=244)
               Index Cond: (unique2 < 10)

Я проигнорировал это -->, так как в моих знаниях нет такого оператора, плюс - прокомментирует выражение позже, я предположил, что вы имели в виду только это ->.

Надеюсь, это поможет ..

...