Istnieją inne dyskusje dotyczące stackoverflow na ten sam temat (linki na dole). Jak zauważono w komentarzach powyżej, może to mieć coś wspólnego z indeksami i optymalizatorem, który pomyli się i użyje niewłaściwego.
Moją pierwszą myślą jest to, że wybierasz top serviceid z (wybierz *....), a optymalizator może mieć trudności ze spychaniem zapytania do zapytań wewnętrznych i korzystaniem z indeksu.
Rozważ przepisanie go jako
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
W twoim zapytaniu baza danych prawdopodobnie próbuje scalić wyniki i zwrócić je, a NASTĘPNIE ograniczyć ją do pierwszej dziesiątki w zewnętrznym zapytaniu. W powyższym zapytaniu baza danych będzie musiała zebrać tylko pierwsze 10 wyników, ponieważ wyniki są scalane, co oszczędza mnóstwo czasu. A jeśli servicerequestID jest indeksowany, na pewno go użyje. W twoim przykładzie zapytanie szuka kolumny servicerequestid w zestawie wyników, który został już zwrócony w wirtualnym, nieindeksowanym formacie.
Mam nadzieję, że to ma sens. Chociaż hipotetycznie optymalizator powinien przyjąć dowolny format, w którym umieszczamy SQL, i za każdym razem znaleźć najlepszy sposób zwracania wartości, prawda jest taka, że sposób, w jaki składamy nasz SQL, może naprawdę wpłynąć na kolejność wykonywania określonych kroków na DB.
SELECT TOP działa wolno, niezależnie od ORDER BY
Dlaczego wykonywanie top(1) na indeksowanej kolumnie w SQL Server jest wolne?