2013-03-07 9 views
5

La domanda è semplice. Quale interrogazione sarà più veloce:Differenza di prestazione: selezionare il primo ordine 1 per selezionare min (val)

SELECT TOP 1 value FROM table ORDER BY value 

o

SELECT TOP 1 MIN(value) FROM table 

possiamo supporre che abbiamo due casi, Caso 1. Nessun indice e Caso 2. Con indice sul valore.
Qualsiasi commento è apprezzato. Grazie!

+6

non è necessario chiamare 'TOP 1' perché' MIN' restituisce già un valore. –

+0

Se ci saranno diffrenze dipenderà dal dbms usato, quindi potresti voler aggiungere a quale ti stai intromettendo. –

+1

Le due opeartions non sono uguali, se per esempio esiste un valore 'NULL' nella colonna' TOP 1' + 'order by' restituirà' NULL' e 'MIN' il valore non nullo più piccolo. – Magnus

risposta

9

Nel caso in cui non esista index:

  • MIN (valore) dovrebbe essere attuato in O (n) con una singola scansione;
  • TOP 1 ... ORDER BY richiede tempo O (N Log N) a causa dell'ordinamento specificato (a meno che il motore DB non sia sufficientemente intelligente per leggere l'intento, il che odierebbe fare affidamento sul codice di produzione).

Quando un indice esiste:

  • Entrambi dovrebbero richiedere solo O (1) tempo, utilizzando l'indice.
+0

Grazie. Tale risposta stavo cercando! – www

+0

Ho visto entrare "Approvato" - è sempre sufficiente grazie. –

Problemi correlati