2012-10-10 23 views
11

Ho creato 8 visualizzazioni diverse e sto utilizzando tutte queste viste in una vista. Quindi mi stavo chiedendo prima di andare oltre con questa idea. Voglio sapere se ha un impatto negativo sulle prestazioni.È errato chiamare viste all'interno di una vista in sql

+1

L'utilizzo di viste per fare riferimento ad altre viste è perfettamente accettabile. Tuttavia, le prestazioni dipenderanno molto dal tuo codice. – SchmitzIT

+2

fino a quando la vista non fa riferimento a se stessa dovrebbe andare bene – atar

+0

Non ** chiamate ** visualizzazioni (non sono "programmi" o codice) - si seleziona da loro. –

risposta

11

No, va bene. In molti casi, personalmente ritengo preferibile scrivere una vista con una definizione gigantesca e di difficile comprensione. A mio parere, l'utilizzo di più viste consente di:

  1. Incapsulare la logica discreta in singole viste.
  2. Riutilizzare la logica nelle singole viste senza dover ripetere la logica (eliminando i problemi di aggiornamento in seguito).
  3. Denominate la vostra logica in modo che sia più facile per il programmatore successivo capire cosa stavate cercando di realizzare.
2

Non è male per le prestazioni solo per essere viste. Potrebbe aggiungere un po 'di complessità da mantenere e causare ulteriori considerazioni quando si desidera modificare lo schema delle tabelle sottostanti. Se stavi usando le viste e si unissero alle stesse tabelle, penso che sarebbe meno efficiente di unirti alla tabella una volta in una vista.

+0

Ottimo punto per avere le stesse tabelle in più viste. – RubberDuck

1

Il puro fatto di interrogare una vista dall'interno di una vista non ha implicazioni negative sulle prestazioni. Non è diverso dall'interrogare una tabella da una vista.

2

Preferisco l'utilizzo di viste nidificate, con ogni vista che incapsula e nomina alcuni dati trasversali.

Per quanto riguarda le prestazioni, può effettivamente migliorare le prestazioni se l'alternativa richiede che gli stessi dati vengano interrogati più volte: una vista nidificata è un po 'come una tabella temporanea, attivata una volta.

Il modo migliore e consigliato per scoprire le implicazioni di prestazioni è provare entrambe le opzioni ed esaminare l'output di spiegare.

5

Le viste vengono "compilate" durante la creazione del piano di esecuzione. Quindi c'è solo una penalità molto piccola per usarli: il tempo extra impiegato da SQL Server per cercare la definizione. Di solito questo ritardo non è misurabile.

Ciò significa che l'utilizzo di viste per gli scopi indicati da Larry Lustig è perfetto e incoraggiante.

TUTTAVIA: accertarsi di non introdurre JOIN non necessari utilizzando questa tecnica. Mentre SQL Server ha meccanismi per eliminare le tabelle non necessarie da una query, si arrende rapidamente se la query diventa complessa. L'esecuzione di questi JOIN aggiuntivi può causare un rallentamento significativo. Questo è il motivo per cui molte aziende hanno una regola di non visualizzazione.

Quindi: utilizzare le viste, ma assicurarsi di non utilizzarle in modo improprio.

Problemi correlati