SET enable_hashjoin = off;
SET
SET enable_mergejoin = off;
SET
SET enable_nestloop = off;
SET
Запрос выводит информацию о числе мест в самолетах всех моделей.
EXPLAIN
SELECT a.model, count( * )
FROM aircrafts a, seats s
WHERE a.aircraft_code = s.aircraft_code
GROUP BY a.aircraft_code;
QUERY PLAN
--------------------------------------------------------------------
GroupAggregate
(cost=10000000000.41..10000000109.95 rows=9 width=56)
Group Key: a.aircraft_code
-> Nested Loop
(cost=10000000000.41..10000000103.16 rows=1339 width=48)
-> Index Scan using aircrafts_pkey on aircrafts a
(cost=0.14..12.27 rows=9 width=48)
-> Index Only Scan using seats_pkey on seats s
253
(cost=0.28..8.61 rows=149 width=4)
Index Cond: (aircraft_code = a.aircraft_code)
(6 строк)
Обратите внимание на оценки стоимости выполнения запроса. Резкое повы-
шение оценок происходит именно в узле, отвечающем за соединение наборов
строк. Эти оценки не означают, что время выполнения запроса будет стремить-
ся к бесконечности. С помощью команды EXPLAIN ANALYZE выполните запрос
и убедитесь в этом сами.
Задание.
Самостоятельно ознакомьтесь с содержанием раздела документации
19.7 «Планирование запросов», а также раздела 14.3 «Управление планировщи-
ком с помощью явных предложений JOIN» и проведите эксперименты с запро-
сами, приведенными в главе 6 пособия, получая различные варианты планов и
сравнивая их.
Ваша задача — понять, как изменения значений этих параметров влияют на
план выполнения запроса. Однако для того чтобы понимать,
когда и почему
нуж-
но изменять значения конкретных параметров, правильно оценивать степень
и направленность их влияния, понимать взаимосвязь параметров, требуется
опыт и изучение документации.
17. Самостоятельно ознакомьтесь с разделом документации 14.2 «Статистика, ис-
пользуемая планировщиком».
18. Команда EXPLAIN имеет опцию BUFFERS. Ознакомьтесь с ней самостоятельно
по разделу документации 14.1 «Использование EXPLAIN».
19. При массовом вводе данных в базу данных производительность СУБД может
снижаться по ряду причин, например, при наличии индексов они обновляют-
ся при вводе каждой новой строки в таблицу, а это требует дополнительных за-
трат ресурсов. Для повышения производительности СУБД в подобных ситуаци-
ях в документации предлагается ряд мер, например, удаление индексов перед
началом массового ввода данных и пересоздание индексов после завершения
такого ввода. Ознакомьтесь с этими мерами самостоятельно по разделу доку-
ментации 14.4 «Наполнение базы данных». Смоделируйте ситуации, описанные
в этом разделе документации, и выполните рекомендуемые действия.
254
|