2011-02-03 15 views
19

Sto cercando di creare una vista di una tabella che evidenzi i dati che soddisfano un criterio specifico. Ad esempio, se ho una tabella con valori interi, voglio che la mia vista mostri le righe che hanno un valore maggiore di 100. So come ottenere ciò creando una vista su una tabella, tuttavia la vista è dinamica? Ho provato questo in MySQL e sembra essere vero. Ma se il mio tavolo ha più di 1000 file, è efficiente? La vista continuerà ad aggiornare "dinamicamente" a qualsiasi modifica nella tabella originale?Le viste MySql sono dinamiche ed efficienti?

+0

Vedere http://stackoverflow.com/q/7922675/632951 – Pacerier

risposta

23

Fondamentalmente, ci sono fondamentalmente 2 types of views in MySQL.

  1. Unire Visualizzazioni

    Questo tipo di vista fondamentalmente solo ri-scrive le query con SQL della vista. Quindi è una scorciatoia per scrivere le domande da solo. Ciò non offre alcun reale vantaggio in termini di prestazioni, ma semplifica la scrittura di query complesse e facilita la manutenzione (poiché se la definizione della vista cambia, non è necessario modificare 100 query sulla vista, ma solo una definizione).

  2. TempTable Visualizzazioni

    Questo tipo di vista crea una tabella temporanea con la query da SQL della vista. Offre tutti i vantaggi della vista unione, ma riduce anche il tempo di blocco sulle tabelle della vista. Pertanto su server ad alto carico potrebbe avere un guadagno di prestazioni piuttosto significativo.

C'è anche la "non definita" tipo di visualizzazione (il default), che cerchiamo di MySQL scegliere ciò che si pensa è il tipo in fase di query migliore ...

Ma si noti qualcosa di importante da notare, è che MySQL non ha alcun supporto per materialized views. Quindi non è come Oracle, dove una visione complessa aumenterà significativamente le prestazioni delle query. Le query delle viste vengono sempre eseguite in MySQL.

Per quanto riguarda l'efficienza, le viste in MySQL non aumentano o diminuiscono l'efficienza. Sono lì per semplificarti la vita quando scrivi e mantieni le tue domande. Ho usato viste su tabelle con centinaia di milioni di righe, e hanno funzionato bene ...

+0

ok, questo ha senso. Grazie ircmaxell! – Santiago

+1

utilizzo delle viste Le prestazioni influiscono negativamente sul fatto che MySQL non gestisce bene le query nidificate, ma ha solo funzionalità molto limitate per spingere i predicati. OTOH Può fare un ottimo lavoro di ottimizzazione di una query senza nidificazione SELECT. – symcbean

+0

@symcbean: hai qualche riferimento per riportare quella richiesta? Sarei curioso di vederlo (legittimamente) ... – ircmaxell

9

mysql non utilizza indici su tabelle temporanee ... quindi può influire negativamente sulle prestazioni.

Problemi correlati