Feb 9 2011

Ordinea (teoretica) de executare a interogarilor

Categorie: SQL Server | PerformantaCatalin Dumitru @ 05:07

Pentru a putea sa scriem interogari performante, este important sa cunoastem ordinea teoretica de executie a instructiunilor. Este teoretica pentru ca optimizatorul poate decide sa foloseasca alta ordine pentru a imbunatatii performanta.

Fara clauza UNION:

  Clauza Descriere
1 FROM, JOIN, APPLY si ON JOIN-urile sunt executate si aplicate primele filtre (ON)
2 WHERE Este aplicat al 2-lea set de filtre
3 GROUP BY si functiile de agregare Se realizeaza gruparile si se calculeaza agregarile
4 HAVING Al 3-lea set de filtre este aplica (se aplica filtre si peste agregari)
5 SELECT Sunt selectate coloanele returnate de interogare
6 ORDER BY Se ordoneaza intregul set de date
7 TOP Ultima filtrare este aplicata. Se returneaza doar X randuri (inregistrari)
8 FOR XML Rezultatul este convertit la formatul XML

Cu clauza UNION:

  Clauza Descriere
1 FROM, JOIN, APPLY si ON JOIN-urile sunt executate si aplicate primele filtre (ON)
2 WHERE Este aplicat al 2-lea set de filtre
3 GROUP BY si functiile de agregare Se realizeaza gruparile si se calculeaza agregarile
4 HAVING Al 3-lea set de filtre este aplica (se aplica filtre si peste agregari)
5 TOP Ultima filtrare este aplicata. Se returneaza doar X randuri (inregistrari). TOP este executat inainte de ORDER BY
6 UNION si SELECT Rezultatele interogarilor sunt concatenate si sunt selectate coloanele returnate de interogarea finala
7 ORDER BY Se ordoneaza intregul set de date
8 FOR XML Rezultatul este convertit la formatul XML

 

Diferenta consta in introducerea operatorului TOP care nu face parte din standardul ANSI/ISO SQL. Conform standardului, ORDER BY ar trebui sa apartina de ultimul SELECT si sa ordoneze intregul set de date. Asta inseamna ca prezenta "TOP" limiteaza setul de date la n inregistrari inainde de sortare. Acesta este motivul pentru care exista doua ordini teoretice de executie a clauzelor.

Etichete: ,