Соединение методом слияния
производится аналогично сортировке слиянием. В
этом случае оба набора строк должны быть предварительно отсортированы по тем
столбцам, по которым производится соединение. Затем параллельно читаются стро-
ки из обоих наборов и сравниваются значения столбцов, по которым производится
соединение. При совпадении значений формируется результирующая строка. Этот
процесс продолжается до исчерпания строк в обоих наборах. Этот метод, как и ме-
тод соединения хешированием, работает только при выполнении эквисоединений.
Он пригоден для работы с большими наборами строк.
10.2 Методы просмотра таблиц
Теперь мы можем перейти к рассмотрению планов выполнения запросов.
Прежде чем приступить к непосредственному выполнению каждого запроса,
PostgreSQL формирует
план
его выполнения. Чтобы достичь хорошей производитель-
ности, этот план должен учитывать свойства данных. Планированием занимается
специальная подсистема — планировщик (planner). Просмотреть план выполнения
запроса можно с помощью команды EXPLAIN. Для детального понимания планов вы-
полнения сложных запросов требуется опыт. Мы изложим лишь основные приемы
работы с этой командой.
Структура плана запроса представляет собой дерево, состоящее из так называемых
узлов плана
(plan nodes). Узлы на нижних уровнях дерева отвечают за просмотр и вы-
дачу строк таблиц, которые осуществляются с помощью методов доступа, описанных
выше. Если конкретный запрос требует выполнения операций агрегирования, соеди-
нения таблиц, сортировки, то над узлами выборки строк будут располагаться допол-
нительные узлы дерева плана. Например, для соединения наборов строк будут ис-
пользоваться способы, которые мы только что рассмотрели. Для каждого узла дерева
плана команда EXPLAIN выводит по одной строке, при этом выводятся также оцен-
ки стоимости выполнения операций на каждом узле, которые делает планировщик.
В случае необходимости для конкретных узлов могут выводиться дополнительные
строки. Самая первая строка плана содержит общую оценку стоимости выполнения
данного запроса.
Запустите утилиту psql и введите простой запрос:
Достарыңызбен бөлісу: |