2010-03-28 22 views
19

Come implementare le viste materializzate?Come implementare la Vista materializzata con MySQL?

In caso contrario, come posso implementare Vista materializzata con MySQL?

Aggiornamento:

avrebbero i seguenti lavoro? Questo non si verifica in una transazione, è un problema?

DROP TABLE IF EXISTS `myDatabase`.`myMaterializedView`; 
CREATE TABLE `myDatabase`.`myMaterializedView` SELECT * from `myDatabase`.`myRegularView`; 
+2

Dai un'occhiata a [Viste materializzate con MySQL] (http://www.fromdual.com/mysql-materialized-view) –

risposta

2

L'esempio si avvicina a una vista materializzata "aggiornamento completo". Potrebbe essere necessaria una vista di "aggiornamento rapido", spesso utilizzata in un'impostazione di data warehouse, se le tabelle di origine includono milioni o miliardi di righe.

Si approssima un rapido aggiornamento utilizzando invece insert/update (upsert) unendo la "tabella di visualizzazione" esistente alle chiavi primarie delle viste di origine (presupponendo che possano essere conservate in chiave) o mantenendo un data_time dell'ultimo aggiornamento e utilizzandolo nei criteri dell'aggiornamento SQL per ridurre il tempo di aggiornamento.

Inoltre, si consideri l'utilizzo della ridenominazione delle tabelle, piuttosto che la funzione di rilascio/creazione, in modo che la nuova vista possa essere costruita e implementata senza quasi nessuna interruzione di indisponibilità. Costruisci prima una nuova tabella 'mview_new', quindi rinomina 'mview' in 'mview_old' (o rilasciatela) e rinomina 'mview_new' in 'mview'. Nell'esempio sopra riportato, la visualizzazione non sarà disponibile mentre è in esecuzione SQL Populate.

30

Gestisco un progetto chiamato Flexviews (http://github.com/greenlion/swanhart-tools) che aggiunge viste materializzate di aggiornamento incrementale a MySQL (ovvero aggiornamento rapido), anche per le viste che utilizzano join e aggregazione. Ho lavorato a questo progetto per tre anni. Include un'utilità di modifica dei dati per leggere i registri del database. Non vengono utilizzati trigger.

Include due metodi di aggiornamento. Il primo è simile al tuo metodo, tranne che una nuova versione è stata creata, quindi RENAME TABLE è usato per scambiare il nuovo con il vecchio. In nessun momento la vista non è disponibile per l'interrogazione, ma 2x lo spazio viene utilizzato per un breve periodo.

Il secondo metodo è vero "aggiornamento rapido", ha persino il supporto per l'aggregazione e i join.

C'è un post su di esso: http://www.mysqlperformanceblog.com/2011/04/04/flexviews-part-3-improving-query-performance-using-materialized-views/

Flexviews è sensibilmente più elevato rispetto all'esempio FromDual fa riferimento Astander.

+0

ma gli strumenti di swanhart non supportano java? –

+0

FlexCDC richiede PHP 5.3+. È uno strumento esterno che raccoglie i log binari. Il resto di Flexviews è costituito da routine memorizzate (programmi che vivono ed eseguono nel database). Non vi è alcun motivo per cui non sia possibile creare/accedere a viste materializzate di Flexviews se si utilizza JDBC, poiché JDBC si connette a MySQL e si creano/visualizzano/gestiscono viste tramite l'interfaccia SQL. –

0

Secondo lo standard mySQL docs and comments at the bottom of the page, sembra che le persone stiano creando visualizzazioni e quindi creando tabelle da tali viste. Non sono sicuro se questa soluzione è l'equivalente di creare una vista materializzata, ma sembra essere l'unica strada disponibile in questo momento.

Problemi correlati