Ao criar tabelas a partir 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 no 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 após a resposta a uma pergunta relacionada sobre SO ( quando usar R, quando usar SQL ). A resposta mais votada começa "faça as manipulações de dados no SQL até que os dados estejam em uma única tabela e depois faça o resto em R."
Comecei a usar modos de exibição, mas tive alguns problemas com os modos de exibição:
- consultas são muito mais lentas
- As visualizações não são despejadas da produção para o banco de dados de backup que eu 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 sobre visualizações?
fonte
Respostas:
As visualizações no MySQL são tratadas usando um de dois algoritmos diferentes:
MERGE
ouTEMPTABLE
.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 opção 'terceiro' é
UNDEFINED
, que diz ao MySQL para selecionar o algoritmo apropriado. O MySQL tentará usarMERGE
porque é mais eficiente. Advertência principal:Atrevo-me a supor que suas VIEWS estão exigindo o algoritmo TEMPTABLE, causando problemas de desempenho.
Aqui está um post realmente antigo sobre o desempenho das visualizações no MySQL e parece que não ficou melhor.
No entanto, pode haver alguma luz no final do túnel sobre esse problema de tabelas temporárias que não contêm índices (causando varreduras completas de tabela). Na versão 5.6 :
Como aponta o @ypercube, o MariaDB 5.3 adicionou a mesma otimização. Este artigo tem uma visão geral interessante do processo:
fonte
Fields of merge-able views and derived tables are involved now in all optimizations employing equalities
As visualizações são ferramentas de segurança. Você não deseja que um usuário ou aplicativo em particular saiba onde está sua tabela de dados; você fornece uma visualização com apenas as colunas necessárias.
Lembre-se de que as exibições sempre degradam o desempenho; consultas semelhantes devem ser procedimentos e funções armazenados, não exibições.
Para fazer um ajuste de consulta, sempre siga as práticas recomendadas, evite usar funções nas cláusulas WHERE, crie índices para acelerar seleções, mas não abuse, pois os í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
fonte
Eu acho que visualizações são a estrutura predefinida (sem dados) para mesclar tabelas em uma para superar de várias consultas de tabela, que podem ser usadas a partir de dados reais para consultas relacionais rápidas ...
fonte