CREATE TEMP TABLE flights_tt AS SELECT * FROM flights_v; Сформируйте планы для получения простой выборки из представления и из
временной таблицы и сравните полученные результаты. Как вы думаете, поче-
му план, сформированный для получения даже простой выборки из представ-
ления, многоуровневый?
EXPLAIN ANALYZE SELECT * FROM flights_v; EXPLAIN ANALYZE SELECT * FROM flights_tt; Выполните более сложные запросы к представлению и временной таблице
и сравните полученные результаты. Включайте в команду EXPLAIN опцию
ANALYZE, чтобы увидеть фактические затраты времени.
Подумайте, при выполнении каких запросов к базе данных «Авиаперевозки»
было бы целесообразно создать временную таблицу. Создайте ее и проведите
эксперименты, подтверждающие эффективность ее использования.
12. Одним из способов повышения производительности является изменение схемы
данных, связанное с денормализацией, а именно: создание индексов.
Выполните следующий простой запрос к таблице «Билеты» (tickets):
EXPLAIN ANALYZE SELECT count( * ) FROM tickets WHERE passenger_name = 'IVAN IVANOV'; Создайте индекс по столбцу passenger_name:
CREATE INDEX passenger_name_key ON tickets ( passenger_name ); Теперь повторите запрос и сравните полученные планы и фактические резуль-
таты.
Предложите какой-нибудь запрос к базе данных «Авиаперевозки», для выпол-
нения которого было бы целесообразно создать индекс. Создайте индекс и по-
вторите запрос. Изучите полученный план, посмотрите, используется ли индекс
планировщиком.
13.* В самом конце главы мы выполняли оптимизацию запроса путем создания ин-
декса и модификации текста запроса. Был сформирован такой запрос:
EXPLAIN ANALYZE SELECT num_tickets, count( * ) AS num_bookings FROM ( SELECT b.book_ref, count( * ) FROM bookings b, tickets t