Desempenho das vistas do MySql [fechado]

Se você está seguindo o caminho do uso de vistas, como você pode garantir um bom desempenho?

ou é melhor não usar vistas em primeiro lugar e simplesmente incorporar o equivalente nas suas declarações selecionadas?

Author: Somnath Muluk, 2012-04-24

6 answers

Depende. Depende totalmente do que estás a ver através da vista. Mas provavelmente reduzindo o seu esforço e dando maior desempenho. Quando a declaração SQL referencia uma vista não indexada, o analisador e otimizador de consulta analisam a fonte tanto da declaração SQL e da vista e então resolvem-nos em um único plano de execução. Não há um plano para a declaração SQL e um plano separado para a vista.

Uma vista não é compilada. É uma tabela virtual feito de outras mesas. Quando você o cria, ele não reside em algum lugar em seu servidor. As consultas subjacentes que compõem a vista estão sujeitas aos mesmos ganhos de desempenho ou dings do otimizador da consulta. Eu nunca testei o desempenho em uma visão VS sua consulta subjacente, mas eu imagino que o desempenho pode variar ligeiramente. Você pode obter um melhor desempenho em uma vista indexada se os dados são relativamente estáticos. Isto pode ser o que você está pensando talvez em termos de "compilado".

Vantagens de vistas:
  1. ver os dados sem armazenar os dados no objecto.
  2. Retique a vista de uma tabela, isto é, pode esconder algumas colunas nas tabelas.
  3. Junta-te a duas ou mais tabelas e mostra-a como um objecto para o utilizador.
  4. Restique o acesso de uma tabela para que ninguém possa inserir as linhas na tabela.

Ver estas ligações úteis:

  1. desempenho da instrução ver vs. SQL
  2. é uma vista mais rápida do que uma simples pergunta?
  3. pesquisa do Mysql vs. PHP
  4. MySql Views é dinâmico e eficiente?
  5. materialized View vs. Tables: quais são as vantagens?
  6. questionar uma vista é mais lento do que executar o SQL directamente?
  7. a workaround for the performance problems of TEMPTABLE views
  8. veja os ganhos de desempenho usando vistas indexadas no servidor SQL
 86
Author: Somnath Muluk, 2017-05-23 12:17:23
Acho que o blog de Peter Zaitsev tem a maioria dos detalhes. Falando a partir de pontos de vista de experiência pessoal pode executar bem se você geralmente mantê-los simples. Num dos meus clientes, continuavam a colocar uma vista em cima de outra e acabou num pesadelo de perfomance.

Geralmente uso vistas para mostrar um aspecto diferente de uma tabela. Por exemplo, na minha mesa de funcionários me mostrar os gerentes ou esconder o campo de salário de funcionários não HR. Também certifique-se sempre de explicar a consulta e vista para entender exatamente o que está acontecendo dentro do MySQL.

Se queres provas sólidas no teu cenário, sugiro que testes. É realmente difícil dizer que usar Vistas é sempre um assassino desempenho, em seguida, novamente uma visão mal escrita provavelmente vai matar o seu desempenho.
 7
Author: Namphibian, 2012-04-27 07:56:19
[[1] Eles servem o seu propósito, mas as complexidades ocultas e ineficiências geralmente superam uma abordagem mais direta. Uma vez encontrei uma declaração SQL que estava se juntando em duas visões, e ordenando-lhes os resultados. Os pontos de vista também estavam ordenando, de modo que o tempo de execução poderia ser medido no que parecia ser horas.
 6
Author: GDP, 2012-04-28 16:45:06
Aqui está um resumo, pode encontrar Avaliações Detalhadas do Peter Zaitsev e de outros lugares. As vistas em MySQL são geralmente uma má ideia. Em Grooveshark, consideramo-los prejudiciais e evitamo-los sempre. Se tiver cuidado, pode fazê-los funcionar, mas, na melhor das hipóteses, são uma forma de se lembrar de como seleccionar os dados ou de o impedir de ter de repetir as ligações complicadas. Na pior das hipóteses, podem causar ineficiências maciças, esconder a complexidade, causar subselectos aninhados acidentais (requerendo mesas e conducentes ao esmagamento de discos), etc. É melhor evitá-los e manter as perguntas em código.
 5
Author: Jay Paroline, 2012-04-28 05:48:30

Se estamos a discutir "se você usa vistas, como garantir o desempenho", e não o efeito de desempenho das vistas em geral, acho que se resume a contenção (como em si mesmo).

Você pode se meter em grandes problemas se você apenas escrever opiniões para tornar a sua consulta simples em todos os casos, mas não tome cuidado que suas opiniões são realmente úteis em termos de desempenho. Qualquer consulta que você está fazendo no final deve estar em execução sà (veja o exemplo de comentário desse link por @eggyal). Claro é uma tautologia, mas não menos valiosa.

Você especialmente precisa ter cuidado para não fazer opiniões a partir de opiniões, só porque isso pode tornar mais fácil para tornar essa visão.

No final, você precisa olhar para a razão pela qual você está usando vistas. Cada vez que você faz isso para tornar a vida mais fácil no final da programação você pode ser melhor com um procedimento armazenado IMHO.

Para manter as coisas sob controlo, talvez queiras escrever porque tens uma certa visão, e decidir porque estão a usá-lo. Para cada 'novo' uso dentro de sua programação, verifique novamente se você realmente precisa da vista, por que você precisa dela, e se isso ainda lhe daria um caminho de execução são. Continue a verificar os seus usos para mantê-lo rápido, e continue a verificar se você realmente precisa dessa Vista.

 3
Author: Nanne, 2012-04-27 08:00:44

Uma coisa não mencionada até agora, mas fazer uma grande diferença é indexação adequada das vistas ' Fonte tabelas .

Como mencionado acima, as vistas não residem no seu DB, mas são reconstruídas todas as vezes. Assim, tudo o que torna a reconstrução mais fácil para o DB aumenta o desempenho da vista.

Muitas vezes, as vistas juntam dados de uma forma que é muito ruim para o armazenamento (sem forma normal), mas muito bom para o uso posterior (fazendo análise, apresentando dados ao utilizador ...) e, com isso, juntar e agregar dados de diferentes tabelas.

O facto de as colunas em que as operações são efectuadas serem ou não indexadas faz uma enorme diferença no desempenho de uma vista. Se as tabelas e as suas colunas relevantes estiverem indexadas e já acederem à janela, não terminará com a nova computação dos índices uma e outra vez. (do lado negativo, isto é feito quando os dados são manipulados nas tabelas de origem)

! Indexar todas as colunas usado em junções e grupos por cláusulas em sua declaração CREATE VIEW !

 3
Author: petermeissner, 2014-12-05 12:49:16