Я не эксперт по SQL, пожалуйста, помогите, как я могу оптимизировать этот запрос?Оптимизация конкретного запроса sql
У меня нет индексов, только таблица, называемая master_table и другие таблицы, я должен оптимизировать этот запрос, чтобы получить те же результаты, я могу создавать индексы, если мне нужно, но я не могу изменить таблицу создания ... .
select month(date_hour), passenger, nationality, passport, airline,
count(*) N_Viagens
from masterTable
group by month(date_hour), passenger, airline, nationality, passport
having count(*) > 10
рядом есть код, чтобы создать таблицу, но я не могу изменить этот код, только запрос или создание индексов:
select
p.birthdate, p.gender, p.passport, p.name + ' ' + p.surname passenger, p.nationality,
r.class, r.flightNR, r.payment, r.ticketNR,
f.src_AP_ID, f.dest_AP_ID, f.AL_ID, f.date_hour, f.AirCrft_Code,ac.manufacturer, ac.model,
SA.City 'Origin City', SA.Country 'Origin Country', SA.Name 'Origin Airport',
DA.City 'Dest City', DA.Country 'Dest Country', DA.Name 'Dest Airport',
al.Name airline, al.IATA, al.icao
into masterTable
from passenger p
join reservation r on r.passport = p.passport
join flight f on f.flightNR = r.flightNR
join airport SA on f.src_AP_ID = SA.AP_Id
join airport DA on f.dest_AP_ID = DA.AP_Id
join aircraft ac on f.airCrft_Code = ac.code
join airline al on f.AL_ID = al.AL_ID
без индекса:
SQL Server Execution Times: CPU time = 10125 ms, elapsed time = 17052 ms.
ЛЮДИ Я думаю, что я сделал это, спасибо всем, спасибо СНОВА
Я создал индекс, как это:
create index idx_MasterTable_Passenger on masterTable(passport, airline)
и запрос я изменил к этому:
select month(date_hour), max(passenger) as passenger, nationality, passport, airline, count(*) N_Viagens
from masterTable
group by airline, nationality, passport, month(date_hour)
having count(*) > 10
Что вы думаете, приемлемо ли это?
SQL Server Execution Times: CPU time = 8362 ms, elapsed time = 5721 ms.
Я буду говорить с учителем, если он согласен с этим
Учитель не принял это изменения, мы не можем изменить таблицы или запроса, только создавая хороший показатель .... предложения ??
'GROUP BY month (date_hour)'? Так что вам все равно, будет ли счет прибыть с ноября 2000 года или ноября 2011 года или в любой другой год, просто бросьте их всех в одно и то же ведро? –
И добавление индекса на Natural Key (пассажир, авиакомпания, национальность) наверняка ускорит процесс. Он будет делать вставки медленнее, но быстрее выбирает – MikeTWebb
Это было дано моим профессором так же, как и я, моя работа - быстро его превратить –