select
p.ID,
e.NAME
from
Paychecks p
inner join Employee e on p.EmployeeID = e.ID
group by
p.ID
order by
max(p.AmountPaid) desc
En anden måde at skrive på, som ser mere logisk ud, men som måske er langsommere (du bliver nødt til at teste), er:
select
e.ID,
e.NAME
from
Employee e
inner join Paychecks p on p.EmployeeID = e.ID
group by
e.ID
order by
max(p.AmountPaid) desc
Med titusindvis af millioner rækker vokser hver forespørgsel nogle gange langsomt, men med de rigtige indekser er dette så hurtigt, som det bliver. Jeg tror, at du grundlæggende har brug for ét indeks på Paychecks.EmployeeID og Paychecks.AmountPaid kombineret. Og indeks på Employee.ID kan hjælpe.
Hvis joinforbindelsen dræber dig i sidste ende, kan du udføre to forespørgsler. Den første bruger kun lønsedlerne til at gruppere dem efter EmployeeID og bestille dem efter max (PaycheckAmount), og en anden kan bruges til at hente navnene for hvert ID. Nogle gange koster tilslutninger mere ydeevne, end du ønsker, og når du fik 10 millioner lønsedler til 500 ansatte, kan det være hurtigere at gøre det i to trin, selvom det vil betyde, at de har arbejdet i virksomheden i gennemsnitligt omkring 1600 år .;-)