У меня есть рабочий запрос PostgreSQL, но он занимает значительное время для выполнения.Мне нужна помощь в ее оптимизации.
У меня есть:
- Максимально удалено внутренних запросов.
- Удалено ненужных данных из запроса.
- Создано
with
запрос, который получает необходимые данные с начала
Мне нужна помощь для оптимизации этого запроса
with data as (
select
e.id,
e.name,
t.barcode,
tt.variant,
t.cost_cents::decimal / 100 as ticket_cost,
t.fee_cents::decimal / 100 as booking_fee
from
tickets t
inner join events e on t.event_id = e.id
inner join ticket_types tt on t.ticket_type_id = tt.id
where
t.status = 2
and e.source in ('source1', 'source2')
)
select
d.name,
count(distinct d.barcode) as issued,
(select count(distinct d2.barcode) from data d2 where d2.id = d.id and d2.variant is null) as sold,
sum(d.ticket_cost) as ticket_revenue,
sum(d.booking_fee) as booking_fees
from
data d
group by
id,
name