Visualizzazione della vista del database: buone pratiche?

2

Spesso al lavoro decidiamo di creare viste nel database per esporre i dati con cui vogliamo lavorare invece di creare alcune query mostruose nel nostro codice. Essendo un po 'nuovo in questo campo le mie ipotesi sono che la vista è solo un'altra query che viene aggiunta a qualsiasi query che passo in fase di esecuzione.

A volte restituiamo centinaia di migliaia di risultati, anche milioni a volte e questo può richiedere alcune volte. Quindi, la mia domanda è: una vista influisce sul tempo e / o sulle prestazioni della query?

    
posta DylanStout 01.06.2015 - 23:37
fonte

3 risposte

1

Secondo questa discussione del 2007 in un forum Oracle, le viste non erano state memorizzate nella cache in quel momento. Da questa descrizione , è chiaro che Oracle fornisce il caching dei risultati delle query, ma che funzionerà indipendentemente da query attraverso una vista, o seleziona senza vista. Se si utilizza la stessa vista in diverse query, mi aspetto che la cache dei risultati possa essere utile un po ', poiché i risultati della cache da una query potrebbero essere riutilizzati da una query diversa basata sulla stessa vista, ma ciò dipenderà probabilmente dalla query e la versione di Oracle.

Tuttavia, Oracle supporta il concetto di visualizzazioni materializzate, che possono accelerare le query e anche le query basate su questo tipo di visualizzazioni. Quindi la risposta corretta è:

  • dipende dalla versione di Oracle, dalla configurazione del database e dalla particolare query.

La cosa migliore che puoi fare è misurarla effettivamente per la tua situazione specifica.

    
risposta data 01.06.2015 - 23:54
fonte
1

In generale, le prestazioni di una vista sono uguali a quelle delle prestazioni della query di definizione. Di solito, il pianificatore di query può eseguire tutti i suoi trucchi sui contorni delle viste se le viste vengono unite con altri set di dati.

È sempre consigliabile eseguire EXPLAIN PLAN rispetto alle dichiarazioni più utilizzate e vedere quale potrebbe essere un collo di bottiglia.

Le visualizzazioni che eseguono elaborazioni costose possono essere rese materialized in modo che i valori calcolati vengono memorizzati e aggiornati automaticamente. Ciò ha senso quando le tabelle sottostanti cambiano non tanto quanto la query viene interrogata.

    
risposta data 01.06.2015 - 23:54
fonte
1

A livello concettuale, sì, una vista è solo una query memorizzata che l'ottimizzatore combinerà con qualsiasi altro join e predicato aggiunto nel codice per produrre un piano di query ottimale. In teoria, l'utilizzo di una vista non dovrebbe essere diverso dalla replica della "query dei mostri" ripetutamente nel tuo codice. E nella misura in cui il tuo team DBA potrebbe essere in grado di fare qualcosa per migliorare le prestazioni della query, vederlo in una vista potrebbe rendere più facile per loro migliorare in modo trasparente le prestazioni di tutte le tue query.

Ora, quando si arriva tra le erbacce, è del tutto possibile che l'utilizzo di una vista di migliorare le prestazioni di alcune query e degradare le prestazioni di altre query rispetto a replicare la query mostro perché provoca l'ottimizzatore di scegliere un piano di query diverso. Poiché l'ottimizzatore sta prendendo in considerazione 10 di migliaia di piani di query e prende molte decisioni su quali rami seguire e quali abbandonare, è difficile sapere in anticipo quali query trarranno beneficio da una vista e che potrebbero essere danneggiate. Diamine, spesso è difficile sapere perché una particolare query è stata migliorata o danneggiata mettendo in una certa logica una vista a meno che non ti piaccia andare in profondità nei file di traccia 10053. Per la maggior parte degli sviluppatori che scrivono la maggior parte delle query, è ragionevolmente sicuro assumere che la presenza di una vista non avrà un impatto significativo sulle prestazioni.

    
risposta data 02.06.2015 - 00:01
fonte

Leggi altre domande sui tag