Учебное пособие Санкт-Петербург «бхв-петербург»



Pdf көрінісі
бет230/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   226   227   228   229   230   231   232   233   ...   256
sql osnovi yazika

Глава 10. Повышение производительности
А в этом примере агрегирование связано уже с вычислениями на основе значений
конкретного столбца, а не просто с подсчетом строк.
EXPLAIN SELECT avg( total_amount )
FROM bookings;
QUERY PLAN
--------------------------------------------------------------------
Aggregate (cost=4958.85..4958.86 rows=1 width=32)
-> Seq Scan on bookings (cost=0.00..4301.88 rows=262788 width=6)
(2 строки)
10.3. Методы формирования соединений наборов строк
Теперь обратимся к методам, которые используются для формирования соединений
наборов строк. Начнем с метода вложенного цикла (nested loop). Для получения
списка мест в салонах самолетов Airbus с указанием класса обслуживания сформиру-
ем запрос, в котором соединяются две таблицы: «Места» и «Самолеты».
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 строк)
302


10.3. Методы формирования соединений наборов строк
Узел 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).
Следующий метод соединения наборов строк — соединение хешированием (hash
join). Получим список маршрутов с указанием модели самолета, выполняющего рей-
сы по этим маршрутам. Воспользуемся таблицами «Маршруты» и «Самолеты».


Достарыңызбен бөлісу:
1   ...   226   227   228   229   230   231   232   233   ...   256




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет