PostgreSQL JOIN, под капотом
У меня есть вопрос о присоединении к PostgreSQL. Создает ли PostgreSQL временную таблицу для JOINed-таблиц или делает все
без каких-либо временных таблиц?
Причина моего вопроса: когда я выполняю запрос SELECT со многими JOIN, я вижу всплеск ввода-вывода в операциях записи. В чем может быть причина этой проблемы?
Большое спасибо.
1 ответ
PostgreSQL будет временно проливать наборы результатов на диск, если они станут достаточно большими. Если у вас нет базы данных меньше вашей оперативной памяти, у нее не будет большого выбора.
Однако вы также можете увидеть неожиданные записи, если вы впервые прочитали страницы данных с момента их создания. На каждой странице установлены "биты подсказок" для оптимизации проверок видимости. Они устанавливаются при уборке и т. Д. Или при обращении к странице. Если вы выполните большой импорт с последующим сканированием таблицы, вы можете получить много неожиданных операций ввода-вывода, поскольку все биты подсказок установлены и записаны.