Newsgroup: it.comp.lang.visual-basic
Titolo: Stored Procedure vs. Query da ADODB.Command

Ciao a tutti !
L'ambiente di lavoro è un applicativo client-server sviluppato in VB.
Il database centrale è MS SQL Server 2000.
Uso ADO per l'accesso ai dati.
Sono sorti dei problemi circa le prestazioni di alcuni programmi.
Io per tentare di risolvere il problema ho creato un paio di Stored 
Procedure relazionando più tabelle fra loro, in aggiunta dentro la SP 
richiamo una Funzione definita dall'utente per la compattazione di tutte le 
righe di descrizione (in una lingua) di ogni articolo, infine ci sono anche 
un paio di subquery per la decodifica di alcuni valori. La query è 
abbastanza pesante, quindi.
Nel programma VB richiamo la SP per mezzo di un ADODB.Command e per mezzo 
della sua Execute, trasferisco il risultato della SP in un ADODB.Recordset.
Mi è stato mosso l'appunto che non era affatto necessario creare la SP, 
bastava semplicemente applicare la medesima query in ogni programma in modo 
diretto, ovvero sempre utilizzando ADODB.Command; le prestazioni secondo gli 
"oppositori" sono identiche ... secondo me no, secondo voi ?
Grazie a tutti per l'attenzione e per le risposte che spero di ricevere.
-- 
'''®foolbrain®'''
Visual Basic Programmer
Database Designer & Manager
F.O.O.L.: Functional Obedient
          Observation Lifeform
B.R.A.I.N.: Biomechanical Robotic Android
            Intended for Nullification
ICQ# 88912631
Skype ID : foolbrain 

 Grazie a tutti per l'attenzione e per le risposte che spero di ricevere.
Passando una Query al Server questa viene elaborata lato Server
pertanto potrei concordare su quanto ti hanno detto, ma servirebbe
vedere bene la cosa, soprattutto quella funzione di cui parli(UDF).
Con QueryOptimizer potresti chiarirti le cose e vedere chi ha ragione
nel tuo caso specifico.
Tieni presente in ogni caso che relazionare le tabelle ed indicizzarle
in modo corretto soprattutto sui campi di ricerca può comportare
variazioni di velocità decisamente visibili quando il tuo DB inizia
ad essere corposo.
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ad essere corposo.
Ovviamente, oserei aggiungere.
Partiamo però dal presupposto che se non è il database a farlo per il 
programma, deve essere il programma a farlo per il database; sinceramente la 
seconda ipotesi mi sembra molto più pericolosa della prima, nonchè 
certamente più lenta !
-- 
Advenire IT s.r.l.
Pool Galileo
r.p. Fabio Bertuzzi
Programmatore Visual Basic
Database Designer & Manager
Skype ID : fabiob032 

 certamente più lenta !
MMmmm non capisco.
Se il DB non è ottimizzato a livello relazionale il programma
può anche fare salti mortali ma il collo di bottiglia rimane
il DB.


 il DB.
Il DB è a posto dal punto di vista relazionale, ci mancherebbe.
Io ho sempre pensato che se ci deve essere qualcuno a dover fare i salti 
mortali, quello deve essere il database e non il programma, magari l'ho 
sempre pensata male.


 "oppositori" sono identiche ... secondo me no, secondo voi ?
Suggerisco di partire con un calcio nel culo agli 'oppositori'.
Spostare l'esecuzione delle attività pesanti, dal client verso stored 
procedure, ha effetti incredibilmente benefici, sia sulle performance 
che sulla manutenibilità:
- La SP viene compilata alla prima esecuzione, e il suo piano di 
esecuzione ottimizzato rimane in cache in Ram finchè c'è quest'ultima 
disponibile. Le query eseguite dal client, vengono anch'esse 
ottimizzate e bufferizzate, ma il piano viene riutilizzato solo *dopo* 
che Sql-Server ha capito che è effettivamente la stessa. E siccome 
qualcosa può cambiare ogni volta (anche solo un parametro), questo 
lavoro aggiuntivo riduce le performance, pur non garantendo la 
riutilizzabilità del piano in Ram.
- Se una medesima query, magari complessa, viene usata 10 volte nello 
stesso client, è più comodo manutenerla in una SP o in 10 punti del 
client?
- Se una query ha un errore, modificare una SP è un click sul QA, 
modificare la query nel client significa ridistribuirlo.
Hai fatto un bel lavoro, vanne fiero.
Ciao
Alberto
-- 
Si è visto di meglio,
ma si è scopato di peggio,
qualche volta a pago
e non erano neanche sempre donne
[Paolo]

 Alberto
