Usuário com melhor resposta
View e Join´s

Pergunta
-
Boa tarde pessoal,
Estava precisando criar uma view com dados de duas tabelas, o problema é que depois vou ter que fazer um select com a view colocando algumas condições no where. Não testei ainda mas acho que essa solução tera um custo maior que fazer um select completo, minha duvida é se ocorrerá um full table scan na primeria solução ?
Obrigado
Odilon
Respostas
-
Boa tarde Odilon.
Se sua tabela não possuir índices ou se o result set da sua consulta retornar uma alta porcentagem de registros da sua tabela. Apesar do custo maior neste caso o Scan vai ser mais eficiênte. Basicamente é isso.
Espero ter ajudado
-
Bom se sempre vai existir where nas expressoes e esse where nao e fixo, ou uma proc ou uma funcao retornando uma table sao boas opcoes, isso depende do plano de execucao que foi mostrado no momento da query na view.
vc. encontrou table scan ?
Abs;
-
Odilon,
Em relação a utilização de views, eu particularmente trabalho muito pouco com este recurso, prefiro utilizar stored procedure ou até mesmo functions.
Entendo a função da view como um recurso para se economizar tempo de processamento em determinadas consultas, bem como, para realizar o particionamento de um determinado conjunto de informações existente em uma table muito carregada.
No caso de utilizar uma view indexada, com certeza é mais rápida o tempo de processamento utilizado para realizar a consulta dos dados neste view, mas por outro lado, a table que esta associada a view, durante o processo de insert pode apresentar muita lentidão.
O full table scan somente irá se esta table não possível nenhum índice.
Todas as Respostas
-
Boa tarde Odilon.
Se sua tabela não possuir índices ou se o result set da sua consulta retornar uma alta porcentagem de registros da sua tabela. Apesar do custo maior neste caso o Scan vai ser mais eficiênte. Basicamente é isso.
Espero ter ajudado
-
-
Bom se sempre vai existir where nas expressoes e esse where nao e fixo, ou uma proc ou uma funcao retornando uma table sao boas opcoes, isso depende do plano de execucao que foi mostrado no momento da query na view.
vc. encontrou table scan ?
Abs;
-
Marcelo,
O problema é que seriam varias View´s, não tive como testar ainda pois o projeto do Banco não esta finalizando, a vantagem seria na simplicidade da arquitetura que estamos construindo para um sistema.
O sistema será 100% e com suporte a 3(Sql-Server, Oracle e Mysql) bancos, a view será criada e será usada por um gerador de código para gerar as duas primeiras camadas. Depois podemos apagar a view e colocar a query na camada, mas a vangatem seria grande se o uso da view na camada por diversas questões, o problema seria o desempenho.
Usar proc ou funções resolveria, mas pelo fato de ser multi-banco complica um pouco, pela manutenção.
Sei que a situação é complicada, por isso estou pesquisando ....
Obrigado
Odilon
-
Bom view para mim a menos que seja para particionar ou usar indexadas nao tem muita utilidade nao, mais sempre existe a possibilidade de casos de uso. pode ser que perder um pouco de performance e ganhar portabilidade seja o seu caso mesmo, enfim cada caso e e um caso o melhor mesmo e analisar .
qualquer coisa e so pedir.
Abs;
-
Odilon,
Em relação a utilização de views, eu particularmente trabalho muito pouco com este recurso, prefiro utilizar stored procedure ou até mesmo functions.
Entendo a função da view como um recurso para se economizar tempo de processamento em determinadas consultas, bem como, para realizar o particionamento de um determinado conjunto de informações existente em uma table muito carregada.
No caso de utilizar uma view indexada, com certeza é mais rápida o tempo de processamento utilizado para realizar a consulta dos dados neste view, mas por outro lado, a table que esta associada a view, durante o processo de insert pode apresentar muita lentidão.
O full table scan somente irá se esta table não possível nenhum índice.