l'aggiunta di un ordine da parte a questa query restituisce più veloce rispetto a meno, perché?

dba.stackexchange https://dba.stackexchange.com/questions/634

  •  16-10-2019
  •  | 
  •  

Domanda

Tutte le idee su perché l'aggiunta di una specie a questa domanda rendimenti notevolmente più veloce che senza l'ordine? Mi sarei aspettato il contrario in modo da che cosa potrebbe fare questo accadere?

SELECT TOP (500) r.cID,r.aField,a.Description 
       FROM dbo.tblR r  
            inner join dbo.tblA a on r.aID = a.ID  
            left join dbo.tblX x on x.cID = r.cID 
       WHERE (ISNULL(x.anotherField,'') <> r.anotherField or x.field3 is null) 
            and (r.ID=(select max(ID) from tblR where cID = r.cID and
            ISNULL(aField,'') <> '')) 
            and r.cID in (select ID from tblC)
       ORDER BY r.cID ASC -- when I comment this line out it runs much slower

I piani di esecuzione non stanno aiutando fuori molto.

È stato utile?

Soluzione

La causa più ovvia sarebbe che (select max(ID) from tblR where cID = c.cID and ISNULL(aField,'') <> '') sub-query nella clausola WHERE in combinazione con il TOP 500 sta compiendo l'ordine fare la differenza.

In entrambi i casi sarà probabilmente in esecuzione che sub-query singolarmente per ogni riga che potrebbe altrimenti tornare fino a quando non ha trovato 500 che corrispondono l'intera WHERE (in realtà, sarà abbastanza luminoso per controllare le altre parti del WHERE prima , in quanto sono molto meno costosi, ma ancora verrà eseguito il sub-query per una parte delle righe che incontra). A occhio e croce, più righe vicino alla parte superiore quando ordinato secondo c.cID partita attualmente quindi deve eseguire il sub-query meno spesso prima di trovare 500 partite di quanto non faccia durante l'esecuzione in giù i risultati nell'ordine i Sceglie di query planner per impostazione predefinita.

(sto supponendo che le cs dovrebbero essere xs o viceversa, altrimenti la query non funzionerebbero come c alias non è definito sul web)

E 'opportuno l'esecuzione di query del genere nel Management Studio con il "piano di query vera e propria" vedere acceso -. Allora si potrebbe vedere dal diagramma che le parti stanno causando le prestazioni differeing

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top