in

UGISS Community

Il sito della community dello User Group Italiano di SQL Server

Viste e performance

Last post 10-03-2008 15.44 by riccardone. 10 replies.
Page 1 of 1 (11 items)
Sort Posts: Previous Next
  • 04-08-2008 16.56

    • rigor73
    • Top 50 Contributor
    • Joined on 06-04-2007
    • Posts 19
    • Points 320

    Viste e performance

    Ciao a tutti.

    Qualcuno sa dirmi se ci sono effettivi decadimenti di performance sull'utilizzo di viste rispetto a SELECT dirette sulle tabelle ?

    Oppure se ci sono decadimenti di performance sull'uso di viste di viste rispetto a viste scritte direttamente sulle tabelle ?

    Io ho provato direttamente confrontato i piani di esecuzione, ma sembra che il costo sia sempre lo stesso; ma a quanto pare la teoria dice che una SELECT è più pesante della relativa query, e idem una vista di viste rispetto a vista diretta sulle tabelle.

    Vi ringrazio anticipatamente

    Filed under:
    • Post Points: 35
  • 04-08-2008 16.58 In reply to

    Re: Viste e performance

    Scusa, di quale teoria si tratta?

    Ti confermo che viste e SELECT dirette sono la stessa cosa. Neanche un'eventuale indice sulla vista potrebbe darti prestazioni diverse, almeno in SQL Server - perché il motore è sufficientemente intelligente da usare tale indice anche per una query diretta che usi gli stessi criteri.

    Marco Russo
    http://www.sqlbi.eu
    http://blogs.devleap.com/marco
    http://sqlblog.com/blogs/marco_russo
    • Post Points: 5
  • 04-09-2008 8.44 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.182
    • Points 15.485

    Re: Viste e performance

    Confermo la domanda di Marco....che ti ha spiegato questa teoria?

    Cosa significa inoltre

    rigor73:
    una SELECT è più pesante della relativa query

    ...una SELECT *è* una query! :-)

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 20
  • 04-09-2008 12.06 In reply to

    • rigor73
    • Top 50 Contributor
    • Joined on 06-04-2007
    • Posts 19
    • Points 320

    Re: Viste e performance

    Grandi ..... ho sempre avuto questa certezza, pur arrivando da altri DBMS, ma alcuni colleghi sono di ritorno da un corso base di Sql, su piattaforma SqlServer 2005, è il docente gli ha raccontato questa storiella delle viste meno performanti delle select che le generano .... ho temuto di trovarmi gente in ufficio che mi faceva pipponi sul fatto che ho passato anni a creare viste per avere una sorta di "archivio" di oggetti per l'accesso ai dati Confused

     Grazie, rettificherò.

     PS : Select e query --> è un refuso, intendevo SELECT e Vista

    • Post Points: 35
  • 04-09-2008 12.30 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.182
    • Points 15.485

    Re: Viste e performance

    rigor73:
    alcuni colleghi sono di ritorno da un corso base di Sql, su piattaforma SqlServer 2005, è il docente gli ha raccontato questa storiella delle viste meno performanti delle select che le generano

    Sarebbe bello sapere

    • dove hanno fatto il corso
    • chi era il docente

    in modo da rendere pubblica la cosa non far andare più nessuno. Corsi come questo sono DANNOSI anzichè di aiuto.

    E' intollerabile che ci siano ancora società che fanno fare corsi a docenti incompetenti!!!!!! (scusa lo sfogo ma mi incazzo sempre di brutto per questo cose)

    Non mi piace farci pubblicita, ma la prossima volta che volete fare un corso contattateci:

    http://www.solidq.com/it/Default.aspx

    non ci sono ancora i prezzi sul sito, ma ti assicuro che sono allineati al mercato...ed almeno siete sicuri che non vi predente una bidonata, anzi siete sicuri di fare un corso che vale la pena fare, perchè al termine delle giornate saprete più di prima, garantito.

    Un corso che non soddsifa questa esigenza è dannossimo per 3 motivi

    • vi fa spendere soldi per nulla
    • non vi risolve i problemi
    • vi fa spendere delle giornate per nulla 

    Ok, ho finito di infervorarmi Smile

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 20
  • 10-03-2008 11.00 In reply to

    • riccardone
    • Top 50 Contributor
      Male
    • Joined on 03-02-2008
    • Bologna - Rimini
    • Posts 11
    • Points 95

    Re: Viste e performance

    Ciao Davide,

    mi sembra che sei andato un po' oltre davanti a un post iniziale che dice tutto e niente.
    Penso siano cose che capitano. Spesso mi trovo davanti a persone in aula che mi dicono "ma questa cosa mi era stata detta da..." e io mi mordo la lingua per evitare di parlare male non in presenza dell'interessato soprattutto perchè nel 99% dei casi, l'informazione è semplicemente mal riportata e non inserita nel contesto di un discorso più ampio.
    Dopo aver letto quanto riportato dalla persona che ha iniziato il post, ho cercato di inquadrare il discorso e subito ho pensato a quello che è scritto qui:

    "When you use a standard view, there is an inherent performance overhead because SQL
    Server must execute SELECT statements against one or more tables to retrieve data for
    the view each time it is accessed. This overhead is increased if views are nested. You
    must be careful when nesting views that you don’t inadvertently introduce a long chain of
    nested views that will have a significant impact on query performance.
    You can easily determine whether views are nested by looking at the view’s definition to
    see whether it relies on tables or views. However, when a view is encrypted, it is not
    possible to look at the definition. To evaluate the performance of a view and to identify
    the actions performed by a nested view that is encrypted, you can use SQL Server
    Profiler."

    Riportato nella documentazione ufficiale di sql server così nei manuali di esame.
    Quindi, pur "ovviamente" confermando che una vista e la sua select sono la stessa cosa, sottolineo come creare viste di viste di viste sia una pratica da evitare.

    Ciao a tutti
    Riccardo
    • Post Points: 20
  • 10-03-2008 11.20 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.182
    • Points 15.485

    Re: Viste e performance

    Ciao Riccardo

    riccardone:
    mi sembra che sei andato un po' oltre davanti a un post iniziale che dice tutto e niente.
    Penso siano cose che capitano. Spesso mi trovo davanti a persone in aula che mi dicono "ma questa cosa mi era stata detta da..." e io mi mordo la lingua per evitare di parlare male non in presenza dell'interessato soprattutto perchè nel 99% dei casi, l'informazione è semplicemente mal riportata e non inserita nel contesto di un discorso più ampio.

    Leggendo il post di rigor73 le cose sono piuttosto chiare e fino a prova contraria mi fido di ciò che una persona dice, soprattutto perchè conosco molto bene il mondo della formazione IT e so per certo che purtroppo accade non di rado che un docente tenga un corso di cui non sa neanche di cosa parla.

    Riguardo al "discorso più ampio" concordo che te in linea di principio, ma non in questo caso. Qui c'è un'oggettività tecnica molto semplice e non si può pensare che una cosa oggettivamente verificabile possa cambiare in funzione di un discorso "più ampio". Un errore è un errore, punto.

    riccardone:
    When you use a standard view, there is an inherent performance overhead because SQL
    Server must execute SELECT statements against one or more tables to retrieve data for
    the view each time it is accessed. This overhead is increased if views are nested

    Questo è vero anche se al posto di viste usi subquery o CTE. Non vedo quindi come sostenere che l'uso di una vista possa peggiorare le performance. Questo è facilmente verificabile da chiunque si prenda la briga di farlo o lavori veramente su SQL Server. Certo che se il docente legge solo il MOC o il BOL allora queste cose non potra mai saperle e non potrà interpretare correttamente ciò che viene scritto anche nel materiale ufficiale che - per inciso - non è certo esente da errori.

    Che poi sia meglio evitare di avere visti troppo nidificate è vero, ma per una questione di efficienza nella manutenzione, non di performance. E questo è una differenza importantissima da spiegare, soprattutto se chi lo sta facendo è un docente, alla quale le persone si affidano per imparare non per avere informazioni errate, che poi inficiano la qualità del loro lavoro. Se ciò non accade c'è una grossa mancanza di rispetto per il cliente e per la propria professionalità, cosa che rovina semplicemente il mercato. E chiunque faccia questo lavoro in modo serio, sa quanto ciò che sto dicendo sia vero.

    Concludo dicendo che se fossi un'azienda che ha pagato per un corso (e si paga in termini di soldi ma anche in termini di tempo), facendo un investimento (perchè alla fine questo è ciò che è realmente un corso), non potrei accettare il discorso del "sono cose che capitano". La formazione è fondamentale per competere in questo mercato, quindi queste cose non devono capitare. Punto.

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 20
  • 10-03-2008 11.38 In reply to

    • riccardone
    • Top 50 Contributor
      Male
    • Joined on 03-02-2008
    • Bologna - Rimini
    • Posts 11
    • Points 95

    Re: Viste e performance

    Non mi sono spiegato ma vedo con rammarico che continui sulla stessa strada quindi con questo non vorrei iniziare un flame inutile.

    Rimanendo sul merito del post ripeto con altre parole, che quando si parla di viste oltre a dire (come è ovvio e ci mancherebbe altro) che la vista ha le stesse performance della select che la definisce va anche aggiunto che non va bene creare una catena di viste che potrebbe aprire le porte ad un deciso decadimento di performance non riuscendo lo sviluppatore a rendersi conto immediatamente (a meno che di non controllare il piano di esecuzione) di quanti e quali join ad esempio sono necessari. Questo non vuol dire "la vista è meno performante della select". Vuol dire "cercare di evitare di creare catene di viste per non incorrere in problemi di performance". E' questo che la persona che poi ha riferito ad altra persona che poi ha riferito qui, si è sentita dire. Da li a sparare a zero su scuole e docenti, mi sembra che sei andato un po' oltre però, ripeto, sono cose che capitano.

    [edit]

    aggiungo, che quanto detto non solo è scritto nel bol e nei manuali ufficiali del corso e tanto basterebbe ma è anche qualcosa che si impara in pratica dove non di rado si devono ripercorrere catene orrende e devastanti per le performance partendo da una semplice vista. Purtroppo, non tutti i dev sono a proprio agio con profiler, piani di esecuzione e indici. Quindi non si rendono conto che dietro ad una vista ci può essere una select malfatta che richiama altre viste ancora peggiori.

    [/edit]

    Ciao a tutti
    Riccardo
    • Post Points: 5
  • 10-03-2008 13.34 In reply to

    • riccardone
    • Top 50 Contributor
      Male
    • Joined on 03-02-2008
    • Bologna - Rimini
    • Posts 11
    • Points 95

    Re: Viste e performance

    rigor73:

    Grandi ..... ho sempre avuto questa certezza, pur arrivando da altri DBMS, ma alcuni colleghi sono di ritorno da un corso base di Sql, su piattaforma SqlServer 2005, è il docente gli ha raccontato questa storiella delle viste meno performanti delle select che le generano .... ho temuto di trovarmi gente in ufficio che mi faceva pipponi sul fatto che ho passato anni a creare viste per avere una sorta di "archivio" di oggetti per l'accesso ai dati Confused

     La storiella  che ti ha raccontato il docente non è

    "la vista è meno performante della select che la definisce"

    Questo per vari motivi. Primo, perchè la vista non contiene dati (almeno fintantochè non è indicizzata) ma contiene solo una query e quindi non può esserci ovviamente differenza tra la query e la vista stessa. Secondo, perchè il docente oltre a essere consapevole di questa ovvia certezza si porta sempre dietro tantissimi script che usa per passare dalla teoria alla pratica e vedere (oltre a quanto previsto dalla documentazione ufficiale) come si comporta l'engine nella pratica creando tabelle, indici, viste e stored procedures, e controllando ad es quando e cosa viene memorizzato in cache e quali percorsi sceglie l'engine nei piani di esecuzione. Terzo, le catene di viste sono da evitare e questo viene raccomandato sia dalla teoria (BOL e MOC) e sia dalla pratica per i motivi suddetti nei miei due post precedenti.

    Ciao a tutti
    Riccardo
    • Post Points: 20
  • 10-03-2008 15.16 In reply to

    • rigor73
    • Top 50 Contributor
    • Joined on 06-04-2007
    • Posts 19
    • Points 320

    Re: Viste e performance

    riccardone:

    La storiella  che ti ha raccontato il docente non è

    "la vista è meno performante della select che la definisce"

    Questo per vari motivi. Primo, perchè la vista non contiene dati (almeno fintantochè non è indicizzata) ma contiene solo una query e quindi non può esserci ovviamente differenza tra la query e la vista stessa. Secondo, perchè il docente oltre a essere consapevole di questa ovvia certezza si porta sempre dietro tantissimi script che usa per passare dalla teoria alla pratica e vedere (oltre a quanto previsto dalla documentazione ufficiale) come si comporta l'engine nella pratica creando tabelle, indici, viste e stored procedures, e controllando ad es quando e cosa viene memorizzato in cache e quali percorsi sceglie l'engine nei piani di esecuzione. Terzo, le catene di viste sono da evitare e questo viene raccomandato sia dalla teoria (BOL e MOC) e sia dalla pratica per i motivi suddetti nei miei due post precedenti.

    Ciao a tutti.

    Innanzi tutti mi scuso per eventuali fraintendimenti su quello che ho scritto e su quello che sto per scrivere, voglio fin da ora chiarire che non è la polemica quella che voglio (tanto che non ho fatto riferimento nè al nome del docente, nè all'organizzazione per cui lavora, e mai la farò), nè tanto meno l'atteggiamento infantile del "io ho ragione, tu no"; voglio però chiarire un aspetto che sicuramente risulta chiaramente critico : il messaggio.

    Posso accettare che una persona che partecipa ad un corso fraintenda il contenuto di quello che gli viene detto, ma che lo facciano tutte (ho rispulciato un pò di appunti dei colleghi), mi sembra strano; so inoltre che sono state fatte dagli alunni domande specifiche sull'argomento per chiarire questo comportamento delle viste, tanto sembrava strano, ma il messaggio è stato ripetuto chiaramente così come l' ho riportato; infine, il messaggio è arrivato così forte da mettere dei dubbi anche a chi, come me, lavora da qualche anno e che quindi ha sentito il bisogno di chiedere conferma delle sue conoscenze (se le si chiamano convinzioni si parte già con il piede sbagliato) a questo forum, frequentato da persone che sicuramente hanno l'esperienza necessaria per aiutare.

     Cosa posso dire di aver imparato ?

    - se dovrò mai insegnare qualcosa a qualcuno, dovrò porre sempre maggiore attenzione alle domande di chi mi ascolta, può essere lo specchio della correttezza di quello che stanno capendo

    - ogni conoscenza tecnica può essere messa in discussione e migliorata in ogni momento

    - le viste e le select hanno le stesse performance Smile

    Grazie ancora a tutti.

     

     

    • Post Points: 20
  • 10-03-2008 15.44 In reply to

    • riccardone
    • Top 50 Contributor
      Male
    • Joined on 03-02-2008
    • Bologna - Rimini
    • Posts 11
    • Points 95

    Re: Viste e performance

    rigor73:

    Posso accettare che una persona che partecipa ad un corso fraintenda il contenuto di quello che gli viene detto, ma che lo facciano tutte (ho rispulciato un pò di appunti dei colleghi), mi sembra strano; so inoltre che sono state fatte dagli alunni domande specifiche sull'argomento per chiarire questo comportamento delle viste, tanto sembrava strano, ma il messaggio è stato ripetuto chiaramente così come l' ho riportato; infine, il messaggio è arrivato così forte da mettere dei dubbi anche a chi, come me, lavora da qualche anno e che quindi ha sentito il bisogno di chiedere conferma delle sue conoscenze (se le si chiamano convinzioni si parte già con il piede sbagliato) a questo forum, frequentato da persone che sicuramente hanno l'esperienza necessaria per aiutare.

    Ti vorrei tornare a specificare che tra i contro c'e' proprio quello che le viste concatenate posso "potenzialmente" avere un impatto sul sistema in termini di performance notevole. Questo te lo confermo, quindi il messaggio che è passato è corretto se si ferma qui. Evitare viste concatenate "quando è possibile" perchè nascondono agli utilizzatori eventuali problemi aggiungendone sopra altri. Se inizi a mettere viste su viste poi non sorprenderti se arriva un tuo collega e ti fa la classica richiesta di espandere la dotazione hardware del server perchè sembra tutto più lento.

    Se tu sei abituato a creare "cataloghi" di oggetti sotto forma di viste, ti consiglio di cambiare metodo e semmai creare un layer di accesso ai dati basato sulle stored procedures perchè meno esposte a questo problema. Questo è quello che ho detto sotto forma di raccomandazione. Certo che se "devi" creare una vista, allora ben venga farlo es. per nascondere l'accesso diretto e/o per fornire una rappresentazione al client che non corrisponde più con le tabelle e/o un insieme dei dati a fini statistici.

    Non può essere passato il dubbio che una vista creata con una semplice "select nome, cognome from clienti" sia meno performante che non la query stessa perchè le eventuali parole non riuscirebbero ad uscire dalla mia bocca e i tanti esempi che faccio che vanno ben oltre la documentazione lo dimostrerebbero.

    I dubbi con cui ti sei scontrato, penso siano dovuti ad un tuo eccessivo ricorso alle viste e quindi sono dubbi fondati che i tuoi colleghi ti hanno fatto e spero che almeno in loro l'idea di rappresentare un db attraverso un catalogo di viste non diventi una cosa normale.

    Ciao a tutti
    Riccardo
    • Post Points: 5
Page 1 of 1 (11 items)
(C) 2007 User Group Italiano di SQL Server