none
View e Join´s RRS feed

  • 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

    segunda-feira, 5 de março de 2007 20:14

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

    segunda-feira, 5 de março de 2007 20:49
  •  

     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;

    terça-feira, 6 de março de 2007 10:07
  • 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.

    terça-feira, 6 de março de 2007 12:11

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

    segunda-feira, 5 de março de 2007 20:49
  • Então,

    Minhas tabelas terão index .... o resultado final seria 10% .... nessa caso a view seria a pior opção ?

    segunda-feira, 5 de março de 2007 21:00
  •  

     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;

    terça-feira, 6 de março de 2007 10:07
  • 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

     

    terça-feira, 6 de março de 2007 11:46
  • 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;

    terça-feira, 6 de março de 2007 12:00
  • 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.

    terça-feira, 6 de março de 2007 12:11