Quale forma + performante?

martedì 20 maggio 2008 - 10.11

secks Profilo | Senior Member

Provo a spiegarmi .
Mi sto ponendo dei dubbi sul modo di creare query di estrazione dati su SQL nel modo più performante:

la prima (a cipolla ) con un sistema di sottoquery in cascata.

SELECT *, C.art_cod AS Expr1 FROM (
SELECT *, A.art_cod AS Expr1 FROM (
SELECT * FROM AnaArticoli WHERE (art_cod = '000000116')) A
LEFT OUTER JOIN GesCosti ON A.art_cod = GesCosti.cos_art) C
LEFT OUTER JOIN GesMovimenti ON C.art_cod = GesMovimenti.mov_art

mentre la seconda in forma orrizzontale:

SELECT *, AnaArticoli.art_cod AS Expr1
FROM AnaArticoli
LEFT OUTER JOIN GesMovimenti ON AnaArticoli.art_cod = GesMovimenti.mov_num
LEFT OUTER JOIN GesCosti ON AnaArticoli.art_cod = GesCosti.cos_art
WHERE (AnaArticoli.art_cod = N'000000116')

a parte i risultati, forse diversi, secondo voi ci puo' essere convenienza ad usare l'una o l'altra forma?

Ciao a tutti.
Paolo.

Brainkiller Profilo | Guru

>Provo a spiegarmi .
>Mi sto ponendo dei dubbi sul modo di creare query di estrazione
>dati su SQL nel modo più performante:
>la prima (a cipolla ) con un sistema di sottoquery in cascata.

Dal poco che ne so io è meglio evitare l'uso di subquery. Anche io spesso ne abuso pur sapendolo. In applicazioni che devono scalare in futuro l'uso di subquery a lungo periodo ti impicca.

>a parte i risultati, forse diversi, secondo voi ci puo' essere
>convenienza ad usare l'una o l'altra forma?

Io personalmente quando voglio provare query diverse le lancio visualizzando il SQL Execution Plan e vedo un po' che cosa cambia dall'una all'altra query e valuto qual è la migliore.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5