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


EXPLAIN SELECT num_tickets, count( * ) AS num_bookings



Pdf көрінісі
бет239/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   235   236   237   238   239   240   241   242   ...   256
sql osnovi yazika

EXPLAIN
SELECT num_tickets, count( * ) AS num_bookings
FROM
( SELECT b.book_ref,
( SELECT count( * ) FROM tickets t
WHERE t.book_ref = b.book_ref
)
FROM bookings b
WHERE date_trunc( 'mon', book_date ) = '2016-09-01'
) AS count_tickets( book_ref, num_tickets )
GROUP by num_tickets
ORDER BY num_tickets DESC;
QUERY PLAN
-----------------------------------------------------------------------
GroupAggregate (cost=14000017.12..27994373.35 rows=1314 width=16)
Group Key: ((SubPlan 1))
-> Sort (cost=14000017.12..14000020.40 rows=1314 width=8)
Sort Key: ((SubPlan 1)) DESC
-> Seq Scan on bookings b
(cost=0.00..13999949.05 rows=1314 width=8)
Filter: (date_trunc('mon'::text, book_date) = '2016-09-01
00:00:00+08'::timestamp with time zone)
SubPlan 1
-> Aggregate (cost=10650.17..10650.18 rows=1 width=8)
-> Seq Scan on tickets t
(cost=0.00..10650.16 rows=2 width=0)
Filter: (book_ref = b.book_ref)
(10 строк)
В плане получены очень большие оценки общей стоимости выполнения запроса:
cost=14000017.12..27994373.35
Универсальной зависимости между оценкой стоимости и реальным временем вы-
полнения запроса не существует. Не всегда можно даже приблизительно предполо-
жить, в какие затраты времени выльется та или иная оценка стоимости. Но, тем не
менее, при рассмотрении других запросов оценок такого порядка нам еще не встре-
чалось. Планировщик предполагает, что из таблицы tickets в подзапросе будет
извлекаться всего по две строки, и эту операцию нужно будет проделать 1 314 раз:
столько строк предположительно будет выбрано из таблицы bookings. Как видно
313


Глава 10. Повышение производительности
из плана, для просмотра строк в таблице tickets используется ее последовательное
сканирование. В результате оценка стоимости этого узла плана получается высокой:
cost=0.00..10650.16
Если у вас не очень мощный компьютер, то время получения результата может
выйти за разумные пределы, и вам придется прервать процесс с помощью клавиш
<
Ctrl>+.
Что можно сделать для ускорения выполнения запроса? Давайте создадим индекс для
таблицы tickets по столбцу book_ref, по которому происходит поиск в ней.


Достарыңызбен бөлісу:
1   ...   235   236   237   238   239   240   241   242   ...   256




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

    Басты бет