Det finns andra stackoverflow-diskussioner om samma ämne (länkar längst ner). Som nämnts i kommentarerna ovan kan det ha något att göra med att index och optimeraren blir förvirrad och använder fel.
Min första tanke är att du gör en select top serviceid från (välj *....) och optimeraren kan ha svårt att trycka ner frågan till de inre frågorna och använda indexet.
Överväg att skriva om 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 fråga försöker databasen förmodligen slå samman resultaten och returnera dem och SEDAN begränsa den till topp 10 i den yttre frågan. I ovanstående fråga behöver databasen bara samla de första 10 resultaten när resultaten slås samman, vilket sparar massor av tid. Och om servicerequestID är indexerat, kommer det att vara säker på att använda det. I ditt exempel letar frågan efter kolumnen servicerequestid i en resultatuppsättning som redan har returnerats i ett virtuellt, oindexerat format.
Hoppas det är vettigt. Medan optimeraren hypotetiskt sett ska ta vilket format vi än lägger in SQL i och ta reda på det bästa sättet att returnera värden varje gång, är sanningen att sättet vi sätter ihop vår SQL verkligen kan påverka ordningen i vilka vissa steg görs på DB.
SELECT TOP går långsamt, oavsett ORDER BY
Varför är det långsamt att göra en top(1) på en indexerad kolumn i SQL Server?