Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

Uno script SQL da 360 linee per 1ora 21min 35sec

Questa la voglio raccontare. Non perchè voglia fare il figo, ma perchè dimostra che fare le cose in un modo piuttosto che in un altro possa davvero fare la differenza. Non scenderò molto nei dettagli, perchè sarebbe inutile e troppo complicato (l'SQL non è completamente frutto della mia mente).

Dunque, parliamo di un SQL Server 2000 SP4 installato su un Windows 2000 Professional SP4.
Il sistema monta 512Mb di RAM e non è nulla di speciale. E' il mio PC che uso in ufficio.
Dunque, ho uno script SQL di 400 linee che:

  1. dichiara un certo numero di variabili @xyz (tutte int)
  2. dichiara al momento 12 tabelle virtuali (tramite declare @tabella table)
  3. valorizza le variabili e riempie tutte le tabelle virtuali (tramite, ovvio, INSERT INTO)

Fino a questo punto lo script impiega 1 secondo per girare e non restituisce nulla. Ottimo, fin qua nessun problema. Il passo successivo è una SELECT (solo lei occupa 60 linee dello script) che è quella che effettivamente mi serve perchè ritorna i valori ad una procedura VBA. Concettualmente si tratta di una SELECT che va in left outer join con un'altra SELECT, più interna. La faccio girare premendo F5 del mio Query Analyzer. Ecco la status-bar del mio Query Analyzer dopo che ho fatto girare lo script:

Per restituirmi 7982 record, lo script ha girato per 1h21m35s.
Non c'è alcun errore. Il task manager è rimasto per tutto questo tempo in questa situazione:

con un'occupazione di RAM di quasi 230Mb.
Beh, insomma, ho risolto come ho risolto?

Ho preso la SELECT interna, ho riempito una tabella temporanea (#tab_inner) con una bella SELECT INTO. Poi ho preso la query e ho modificato la left outer join in modo che usasse questa #tab_inner invece del suo corrispondente codice SQL.
Beh, vi dirò, il tempo di esecuzione è passato dall'ora e mezza di prima a soli 3 secondi.
Questo vuol dire ottimizzare!!!!

powered by IMHO 1.2

Print | posted on giovedì 15 dicembre 2005 20:02 | Filed Under [ Tecnologia ]

Feedback

Gravatar

# re: Uno script SQL da 360 linee per 1ora 21min 35sec

Scusa Igor ma te la devo proprio dire.

Il mio ex-ex-ex capo (e forse il migliore che abbia mai avuto) mi ha sempre detto che se ottimizzando ottenevo un incremento superiore ad un ordine di grandezza voleva dire che avevo scritto del codice inefficiente in primo luogo.

Erano almeno 6 o 7 anni fa, ma aveva ragione allora ed ha ragione oggi.
17/12/2005 02:09 | Phillo
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET