私は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.
彼がこれに同意するなら、私は先生と話します
先生はこの変更を受け入れませんでした。テーブルやクエリを変更することはできず、適切なインデックスを作成するだけです。