sql >> Databasteknik >  >> RDS >> Sqlserver

Varför välja toppklausul kan leda till långa tidskostnader

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?



  1. Hur man övervakar databasinstansernas tillstånd

  2. Fix:"den ledande precisionen för intervallet är för liten" i Oracle Database

  3. Hur tvingar man fram pascal-fall med Oracles Entity Framework-stöd?

  4. Fel 28000:Inloggning misslyckades för användaren DOMAIN\\user med pyodbc