2009-02-22 9 views

risposta

3

Secondo Microsoft, se si utilizzano le viste indicizzate in SQL Server 2000/2005/2008, è possibile ottenere prestazioni eccellenti.

Le viste indicizzate possono aumentare le prestazioni della query nei modi seguenti
1. Le aggregazioni possono essere precalcolate e memorizzate nell'indice per ridurre al minimo i costosi calcoli durante l'esecuzione della query.
2. Le tabelle possono essere preimpostate e il set di dati risultante viene memorizzato.
3. Combinazioni di join o aggregazioni possono essere memorizzate

Ma proprio come gli indici sulle tabelle, gli indici sulle viste subiscono un overhead di modifica. Pertanto, aggiungi un indice a una vista solo se il vantaggio della sua velocità aumenta quando supera il tempo necessario per aggiornare l'indice della vista.

I collegamenti seguenti forniscono ulteriori informazioni su questo (su quando utilizzare cosa).

  1. SQL Server 2000/2005 Indexed View Performance Tuning and Optimization Tips.
  2. Improving Performance with SQL Server 2000 Indexed View.
  3. See performance gains by using indexed views in SQL.
+2

Se leggi questo articolo da vicino, vedrai che sta parlando di "visioni materializzate", che sono in realtà un altro animale, che crea davvero una forma speciale di tavolo. – dkretz

1

Nella maggior parte dei database, sono funzionalmente intercambiabili (ignorando le viste materializzate, che sono comunque qualcosa di completamente diverso). Esistono due motivi comuni per la creazione di viste. 1. Meccanismo di astrazione (e alias di colonne) e 2. Per autorizzazioni e controllo di accesso. Ma per quanto riguarda l'efficienza, non è un problema.

+1

Non vero. Alcuni database presentano problemi di prestazioni quando le viste sono nidificate. –

+0

E hai qualche riferimento? Ciò sembra altamente improbabile, (anche se è per questo che ho detto "nella maggior parte dei database"). – dkretz

+0

Sì. In Oracle le viste nidificate possono comportarsi male. Lo abbiamo sperimentato noi stessi confrontando le query espanse con le stesse query definite come più viste all'interno di Oracle. –

0

pensare in questo modo:

Una vista è semplicemente una dichiarazione prescelta che vive sul server ed è stato compilato dal motore SQL.

Generalmente le viste sono utilizzate per limitare/semplificare i risultati dalla tabella.

saluti K

1

Dipende dalla base di dati e la definizione della vista.

Una semplice vista che fa l'alias delle colonne o esegue calcoli semplici non sarà diversa dal fare direttamente la query.

Tuttavia, in alcuni casi le visualizzazioni possono essere molto più lente. Un esempio: in Oracle, se nidifichi troppo le query di visualizzazione (ad esempio, una vista utilizza un altro come tabella, che ne usa un'altra, ecc.), Puoi creare prestazioni pessime.

In generale è necessario testare con il database specifico e le query in questione.

+0

Stai affermando che l'utilizzo della vista rende la query più lenta della sottoselezione in linea che rappresenta? – Khb

+0

Se è inefficiente, scommetto che è perché le viste aggiungono impropriamente più campi e/o join del necessario. Ma è sempre la stessa prestazione dell'equivalente istruzione SQL singola. – dkretz

+1

No, abbiamo provato a utilizzare le query SAME, solo nelle visualizzazioni o in selezioni con sottoquery. Quest'ultimo può essere molto più veloce. Perché? Boh, Oracle è pieno di mistero e non in senso buono. –