Inner join, where o select nidificate?

lunedì 21 aprile 2008 - 17.34

Klaus-zanini Profilo | Senior Member

Ultimamente ho sempre più a che fare con il mondo di MSDE e ho spesso grossi problemi nelle prestazioni.
Per recuperare dati da più tabelle contemporaneamente cos'è più performante?
Ho notato che fare select tra tabelle in join tra loro a volte è più veloce di una select tra due tabelle con tante condizioni Where, e altre volte no. A volte le select nidificate sono ancora più veloci.
C'è una regola o qualche semplice esempio per capire quando usare le une o le altre?

Come influenzano questa scelta l'uso di indici e chiavi?

lbenaglia Profilo | Guru

>Per recuperare dati da più tabelle contemporaneamente cos'è più
>performante?
>Ho notato che fare select tra tabelle in join tra loro a volte
>è più veloce di una select tra due tabelle con tante condizioni
>Where, e altre volte no. A volte le select nidificate sono ancora
>più veloci.
>C'è una regola o qualche semplice esempio per capire quando usare
>le une o le altre?

Tutti i DBMS offrono uno strumento essenziale per aumentare le prestazioni nell'accesso ai dati: gli indici.
Lo standard ANSI SQL prevede l'operatore JOIN per correlare due tabelle, ma volendo si potrebbe specificare le due tabelle nella clausola FROM e le colonne di correlazione nella clausola WHERE.
Il query optimizer genererà per entrambe le query il medesimo piano di esecuzione.

Io personalmente tendo ad utilizzare la clausola WHERE esclusivamente per specificare le condizioni di filtro sui dati, per una questione di "ordine" nella stesura della query.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Klaus-zanini Profilo | Senior Member

E' molto probabile che allora io non utilizzi a dovere gli indici. Dove posso trovare delle regole chiare per ottimizzare le mie query utilizzando gli indici corretti sulle tabelle?

lbenaglia Profilo | Guru

>E' molto probabile che allora io non utilizzi a dovere gli indici.
>Dove posso trovare delle regole chiare per ottimizzare le mie
>query utilizzando gli indici corretti sulle tabelle?

L'argomento è alquanto vasto e trovi come sempre tutte le indicazioni sui Books Online.
Prenditi un po' di tempo per assimilarlo:
http://msdn2.microsoft.com/en-us/library/ms189271.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5