Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como funcionam as visualizações do MySQL?


Uma visualização funciona como uma tabela , mas não é uma tabela. Ela nunca existe; é apenas uma instrução SQL preparada que é executada quando você faz referência ao nome da visualização. IE:
CREATE VIEW foo AS
  SELECT * FROM bar

SELECT * FROM foo

...é equivalente a executar:
SELECT x.* 
  FROM (SELECT * FROM bar) x

Um MySQLDump nunca conterá linhas a serem inseridas em uma visão...

Isso, infelizmente, é por design (embora questionável). Existem inúmeras limitações para visualizações do MySQL, que estão documentadas:http://dev.mysql.com/doc/refman/5.0/en/create-view.html

Então, se for apenas uma tabela/instrução preparada imaginária, isso significa que teoricamente tem o mesmo desempenho (ou até menos) que uma tabela/consulta normal?


Não.
Uma tabela pode ter índices associados, o que pode tornar a recuperação de dados mais rápida (com algum custo para inserção/atualização). Alguns bancos de dados suportam visualizações "materializadas", que são visualizações que podem ter índices aplicados a elas - o que não deve ser uma surpresa que o MySQL não suporte dada a funcionalidade de visualização limitada (que só começou na v5 IIRC, muito tarde para o jogo).

Como uma exibição é uma tabela derivada, o desempenho da exibição é tão bom quanto a consulta na qual ela é construída. Se essa consulta for ruim, o problema de desempenho será apenas uma bola de neve ... Dito isso, ao consultar uma exibição - se uma referência de coluna de exibição na cláusula WHERE não estiver envolvida em uma função (IE:WHERE v.column LIKE ... , não WHERE LOWER(t.column) LIKE ... ), o otimizador pode enviar os critérios (chamados de predicado) para a consulta original - tornando-a mais rápida.