10.3 Методы формирования соединений наборов строк
Теперь обратимся к методам, которые используются для формирования соедине-
ний наборов строк. Начнем с метода
вложенного цикла
(nested loop). Для получе-
ния списка мест в салонах самолетов Airbus с указанием класса обслуживания сфор-
мируем запрос, в котором соединяются две таблицы: «Места» (seats) и «Самолеты»
(aircrafts).
EXPLAIN
SELECT a.aircraft_code, a.model,
s.seat_no, s.fare_conditions
FROM seats s
JOIN aircrafts a ON s.aircraft_code = a.aircraft_code
WHERE a.model ~ '^Air'
ORDER BY s.seat_no;
QUERY PLAN
-----------------------------------------------------------------
Sort (cost=23.28..23.65 rows=149 width=59)
Sort Key: s.seat_no
-> Nested Loop (cost=5.43..17.90 rows=149 width=59)
-> Seq Scan on aircrafts a (cost=0.00..1.11 rows=1 width=48)
Filter: (model ~ '^Air'::text)
-> Bitmap Heap Scan on seats s (cost=5.43..15.29 rows=149
width=15)
,
→
Recheck Cond: (aircraft_code = a.aircraft_code)
-> Bitmap Index Scan on seats_pkey (cost=0.00..5.39
rows=149 width=0)
,
→
Index Cond: (aircraft_code = a.aircraft_code)
(9 строк)
Узел Nested Loop, в котором выполняется соединение, имеет два дочерних узла:
внешний — Seq Scan и внутренний — Bitmap Heap Scan. Во внешнем узле последо-
вательно сканируется таблица aircrafts с целью отбора строк согласно условию Filter:
(model ~’^Air’::text). Для каждой из отобранных строк во внутреннем дочернем уз-
ле (Bitmap Heap Scan) выполняется поиск в таблице seats по индексу с использо-
ванием битовой карты. Она формируется в узле Bitmap Index Scan с учетом усло-
вия Index Cond: (aircraft_code = a.aircraft_code), т. е. для текущего значения атрибута
aircraft_code, по которому выполняется соединение. На верхнем уровне плана сфор-
мированные строки сортируются по ключу (Sort Key: s.seat_no).
Следующий метод соединения наборов строк —
Достарыңызбен бөлісу: