Mysql
 sql >> Database >  >> RDS >> Mysql

Come funzionano le viste MySQL?

Una vista funziona come una tabella , ma non è un tavolo. Non esiste mai; è solo un'istruzione SQL preparata che viene eseguita quando si fa riferimento al nome della vista. IE:

CREATE VIEW foo AS
  SELECT * FROM bar

SELECT * FROM foo

...equivale a correre:

SELECT x.* 
  FROM (SELECT * FROM bar) x

Un MySQLDump non conterrà mai righe da inserire in una vista...

Questo, purtroppo, è di progettazione (anche se discutibile). Esistono numerose limitazioni per le viste MySQL, che sono documentate:http://dev.mysql.com/doc/refman/5.0/en/create-view.html

Quindi, se si tratta solo di una tabella immaginaria/dichiarazione preparata, significa che teoricamente ha le stesse prestazioni (o anche meno) di una normale tabella/query?

No.
A una tabella possono essere associati indici, che possono rendere più rapido il recupero dei dati (a un certo costo per l'inserimento/l'aggiornamento). Alcuni database supportano viste "materializzate", ovvero viste a cui possono essere applicati indici, il che non dovrebbe sorprendere che MySQL non supporti data la funzionalità di visualizzazione limitata (iniziata solo in IIRC v5, molto tardi nel gioco).

Poiché una vista è una tabella derivata, le prestazioni della vista sono buone quanto la query su cui è basata. Se quella query fa schifo, il problema delle prestazioni sarà solo una valanga... Detto questo, quando si interroga una vista, se un riferimento alla colonna della vista nella clausola WHERE non è racchiuso in una funzione (IE:WHERE v.column LIKE ... , non WHERE LOWER(t.column) LIKE ... ), l'ottimizzatore può inserire i criteri (chiamati predicato) nella query originale, rendendola più veloce.