Domanda

Di 'Ho una tabella cluster PrimaryKey, e in tutti i casi Voglio che i miei risultati siano ordinate per PrimaryKey così ho inoltre sempre ORDER BY PrimaryKey in tutte le query.

Fa questo ORDER BY influire sulle prestazioni in qualsiasi modo o è ignorato dal profiler come le righe sono già in questo ordine?

Nel mio caso sto usando un database di SQL Server 2005

È stato utile?

Soluzione

E 'quasi certamente influisce sulle prestazioni.

Se solo fare una query come

Select *
From Table
Order by PrimaryKey

E 'probabile che non pregiudica nulla.

Tenete a mente, però, che questo determina solo l'ordine delle righe al livello foglia dell'indice cluster. Se lo fai JOINs, o utilizzare altri indici che la consultazione con chiave evitano, quindi il ORDER BY genererà lavoro supplementare.

Se ogni indice e ogni tavolo che si potrà mai JOIN o riferimento quando si interroga questa tabella sono tutte ordinate per la stessa chiave (nella stessa direzione) allora probabilmente non lo farà prestazioni impatto. Fuori questo scenario molto limitata, si vedrà un colpo.

Solo uso ORDER BY quando l'ordine dei risultati effettivamente conta. Nella mia esperienza è raramente necessario.

Altri suggerimenti

Per una query complessa, SQL Server può decidere che ha bisogno di ordinare porzioni di dati nella query, e può anche richiedere più operatori di ordinamento in base al quale gli indici sono disponibili e la complessità della query.

Questi tipi può sicuramente influire sulle prestazioni della query, soprattutto se si lavora con tabelle di grandi dimensioni, e in alcuni casi ci si accorge che l'aggiunta di un'istruzione ORDER BY cambierà in modo significativo il piano di esecuzione di SQL Server genera per la query.

Se siete interessati a vedere l'impatto di Ordinamento delle query che stai messa a punto, eseguire il vero e proprio piano con SQL Sentry Piano Explorer (gratuito) o utilizzando SQL Server Management Studio con "Includi piano di esecuzione effettivo" acceso e sguardo alla ordinato indicatore passando il mouse sopra le singole fasi di dati nel piano. Nel Piano di Explorer è possibile anche guardare la colonna ordinato nella vista in pianta albero o superiore Operations.

Per qualcosa di semplice come:

Select * 
From Table 
Order by PrimaryKey 

Si deve constatare che, mentre l'Ordine Di non sembra modificare il piano di query della query, che l'indicatore ordinato nel piano di esecuzione non cambia da false a true quando si aggiunge l'ordine con.

Ti potrebbe aver sentito che "l'ordine dei risultati restituiti da un'istruzione SELECT non può essere garantita senza una clausola ORDER BY" ; Una ragione di questo è una caratteristica del Enterprise Edition di SQL Server che consente a SQL Server sulle spalle una scansione di tabella sopra l'altro, a volte chiamato" Merry-go round-ray "scansione e chiamata anche " scansione avanzata ".

Per ulteriori ricerche, consiglio vivamente entrambe le seguenti libri che sono attualmente disponibili come ebooks liberi dal Redgate:

Spero che questo aiuti!

Guarda il piano di query per entrambe le query, si vedrà che il "ORDER BY" clausola si tradurrà in una sorta di dati che viene restituito dal resto della query (che dovrebbe essere in memoria, ma potrebbe essere di paging se la memoria insufficiente). Il tempo di questo genere prende è legata alla quantità di dati (si deve camminare almeno una volta) e come ben ordinato i dati già è (può essere ordinato correttamente se si esegue l'ordinamento su una colonna indicizzata, o dati è unito su una colonna indicizzata)

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