QUERY PLAN
-----------------------------------------------------------------
Sort (cost=24.25..24.31 rows=21 width=124)
Sort Key: r.flight_no
-> Hash Join (cost=1.20..23.79 rows=21 width=124)
Hash Cond: (r.aircraft_code = a.aircraft_code)
-> Seq Scan on routes r (cost=0.00..20.64 rows=464 width=108)
-> Hash (cost=1.09..1.09 rows=9 width=48)
-> Seq Scan on aircrafts a (cost=0.00..1.09 rows=9 width=48)
(7 строк)
На самом внутреннем уровне плана последовательно сканируется (Seq Scan) таблица
aircrafts, и формируется хеш-таблица, ключами которой являются значения атрибу-
та aircraft_code, т. к. именно по нему выполняется соединение таблиц. Затем после-
довательно сканируется (Seq Scan) таблица routes, и для каждой ее строки выполня-
ется поиск значения атрибута aircraft_code среди ключей хеш-таблицы: Hash Cond:
(r.aircraft_code = a.aircraft_code). Если такой поиск успешен, значит, формируется ком-
бинированная результирующая строка выборки. На верхнем уровне плана сформи-
рованные строки сортируются. Обратите внимание, что хеш-таблица создана на ос-
нове той таблицы, число строк в которой меньше, т. е. aircrafts. Таким образом, поиск
в ней будет выполняться быстрее, чем если бы хеш-таблица была создана на основе
таблицы routes.
Последний из методов соединения наборов строк —
соединение слиянием
(merge
join). Для иллюстрации воспользуемся простым запросом, построенным на основе
таблиц «Билеты» (tickets) и «Перелеты» (ticket_flights). Он выбирает для каждого би-
лета все перелеты, включенные в него. Конечно, это очень упрощенный запрос, в ре-
альной ситуации он не представлял бы большой практической пользы, но в целях
упрощения плана и повышения наглядности, воспользуемся им.
Достарыңызбен бөлісу: