Der er andre stackoverflow-diskussioner om det samme emne (links nederst). Som nævnt i kommentarerne ovenfor kan det have noget at gøre med, at indekser og optimeringsværktøjet bliver forvirret og bruger den forkerte.
Min første tanke er, at du laver et udvalgt top serviceid fra (vælg *....), og optimeringsværktøjet kan have svært ved at skubbe forespørgslen ned til de indre forespørgsler og gøre brug af indekset.
Overvej at omskrive det som
select top 10 ServiceRequestID
from big_table_1
inner join big_table_2 cap2
on cap1.servicerequestid = cap2.customerreferencenumber
and big_table_1.statusid = 2
I din forespørgsel forsøger databasen sandsynligvis at flette resultaterne og returnere dem og SÅ begrænse den til top 10 i den ydre forespørgsel. I ovenstående forespørgsel skal databasen kun samle de første 10 resultater, da resultaterne bliver flettet, hvilket sparer masser af tid. Og hvis servicerequestID er indekseret, vil det være sikker på at bruge det. I dit eksempel leder forespørgslen efter servicerequestid-kolonnen i et resultatsæt, der allerede er returneret i et virtuelt, uindekseret format.
Håber det giver mening. Selvom det hypotetisk set er meningen, at optimeringsværktøjet skal tage det format, vi sætter SQL i, og finde ud af den bedste måde at returnere værdier på hver gang, er sandheden, at den måde, vi sammensætter vores SQL på, virkelig kan påvirke den rækkefølge, som visse trin udføres i. DB.
SELECT TOP er langsom, uanset BESTIL BY
Hvorfor er det langsomt at lave en top(1) på en indekseret kolonne i SQL Server?