AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 16372
Accepted
David LeBauer
David LeBauer
Asked: 2012-04-12 10:30:18 +0800 CST2012-04-12 10:30:18 +0800 CST 2012-04-12 10:30:18 +0800 CST

Quando usar visualizações no MySQL?

  • 772

Ao criar tabelas de várias junções para uso em análise, quando é preferível usar visualizações em vez de criar uma nova tabela?

Uma razão pela qual eu preferiria usar visualizações é que o esquema do banco de dados foi desenvolvido por nosso administrador de dentro do Ruby, e eu não estou familiarizado com o Ruby. Posso solicitar a criação de tabelas, mas requer uma etapa adicional e gostaria de mais flexibilidade ao desenvolver/testar novas junções.

Comecei a usar visualizações seguindo a resposta a uma pergunta relacionada no SO ( Quando usar R, quando usar SQL ). A resposta mais votada começa "faça as manipulações de dados em SQL até que os dados estejam em uma única tabela e, em seguida, faça o resto em R".

Comecei a usar visualizações, mas encontrei alguns problemas com visualizações:

  1. as consultas são muito mais lentas
  2. As visualizações não são despejadas da produção para o banco de dados de backup que uso para análise.

As visualizações são apropriadas para esse uso? Em caso afirmativo, devo esperar uma penalidade de desempenho? Existe uma maneira de acelerar as consultas nas visualizações?

mysql optimization
  • 3 3 respostas
  • 90433 Views

3 respostas

  • Voted
  1. Best Answer
    Derek Downey
    2012-04-12T11:44:11+08:002012-04-12T11:44:11+08:00

    As visualizações no MySQL são tratadas usando um de dois algoritmos diferentes: MERGEou TEMPTABLE. MERGEé simplesmente uma expansão de consulta com aliases apropriados. TEMPTABLEé exatamente o que parece, a exibição coloca os resultados em uma tabela temporária antes de executar a cláusula WHERE e não há índices nela.

    A 'terceira' opção é UNDEFINED, que diz ao MySQL para selecionar o algoritmo apropriado. O MySQL tentará usar MERGEporque é mais eficiente. Advertência principal:

    Se o algoritmo MERGE não puder ser usado, uma tabela temporária deverá ser usada. MERGE não pode ser usado se a exibição contiver qualquer uma das seguintes construções:

    • Funções agregadas (SUM(), MIN(), MAX(), COUNT() e assim por diante)

    • DISTINTO

    • AGRUPAR POR

    • TENDO

    • LIMITE

    • UNIÃO ou UNIÃO TODOS

    • Subconsulta na lista de seleção

    • Refere-se apenas a valores literais (neste caso, não há tabela subjacente)

    [src]

    Eu me arriscaria a adivinhar que suas VIEWS estão exigindo o algoritmo TEMPTABLE, causando problemas de desempenho.

    Aqui está uma postagem de blog muito antiga sobre o desempenho das visualizações no MySQL e não parece ter melhorado.

    No entanto, pode haver alguma luz no fim do túnel sobre essa questão de tabelas temporárias que não contêm índices (causando varreduras completas de tabela). Em 5.6 :

    Para casos em que a materialização é necessária para uma subconsulta na cláusula FROM, o otimizador pode acelerar o acesso ao resultado adicionando um índice à tabela materializada. ... Depois de adicionar o índice, o otimizador pode tratar a tabela derivada materializada da mesma forma que uma tabela usual com um índice e se beneficia de forma semelhante do índice gerado. A sobrecarga da criação do índice é insignificante em comparação com o custo da execução da consulta sem o índice.

    Como o @ypercube aponta, o MariaDB 5.3 adicionou a mesma otimização. Este artigo tem uma visão geral interessante do processo:

    A otimização é aplicada, então a tabela derivada não pode ser mesclada em seu SELECT pai, o que acontece quando a tabela derivada não atende aos critérios para VIEW mesclável

    • 51
  2. Rainier Morilla
    2012-04-12T10:58:53+08:002012-04-12T10:58:53+08:00

    As visualizações são ferramentas de segurança. Você não deseja que um determinado usuário ou aplicativo saiba onde está sua tabela de dados, você fornece uma visualização apenas com as colunas necessárias.

    Lembre-se de que visualizações sempre degradam o desempenho, consultas semelhantes devem ser procedimentos e funções armazenados, não visualizações.

    Para fazer um ajuste de consulta, siga sempre as melhores práticas, evite usar funções em cláusulas WHERE, crie índices para acelerar seleções, mas não abuse dos índices degradam inserções, atualizações e exclusões.

    Existe uma boa documentação que pode ajudá-lo: http://www.toadworld.com/LinkClick.aspx?fileticket=3qbwCnzY/0A=&tabid=234

    • 17
  3. Shahzad Shaikh
    2018-11-08T00:18:44+08:002018-11-08T00:18:44+08:00

    eu acho que as visualizações são a estrutura predefinida (sem dados) para mesclar tabelas em uma para superar a consulta de várias tabelas, que pode ser usada a partir de dados reais para consultas relacionais rápidas ...

    • -2

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve