PostgreSQL JOIN, под капотом

У меня есть вопрос о присоединении к PostgreSQL. Создает ли PostgreSQL временную таблицу для JOINed-таблиц или делает все
без каких-либо временных таблиц?

Причина моего вопроса: когда я выполняю запрос SELECT со многими JOIN, я вижу всплеск ввода-вывода в операциях записи. В чем может быть причина этой проблемы?

Большое спасибо.

1 ответ

Решение

PostgreSQL будет временно проливать наборы результатов на диск, если они станут достаточно большими. Если у вас нет базы данных меньше вашей оперативной памяти, у нее не будет большого выбора.

Однако вы также можете увидеть неожиданные записи, если вы впервые прочитали страницы данных с момента их создания. На каждой странице установлены "биты подсказок" для оптимизации проверок видимости. Они устанавливаются при уборке и т. Д. Или при обращении к странице. Если вы выполните большой импорт с последующим сканированием таблицы, вы можете получить много неожиданных операций ввода-вывода, поскольку все биты подсказок установлены и записаны.

Другие вопросы по тегам