none
Dúvida de funcionamento de uma VIEW com WHERE RRS feed

  • Pergunta

  • Bom dia!

    Estou com uma duvida referente ao funcionamento de uma VIEW.

    Possuo um select com diversos filtros que demora cerca de 1min para processar.

    Pensei em colocar esse select em uma VIEW, já que a VIEW mantém o código SQL pré compilado. Porém, como possuo filtros variáveis de acordo com o CODIGO_CLIENTE por exemplo, minha dúvida é se a VIEW vai trazer a tabela INTEIRA do select da VIEW para depois realizar o filtro ou se vai compilar novamente a VIEW com o WHERE adicionado, e se vale a pena nesse caso utilizar view.

    Por exemplo:

    Possuo a tabela TB_CLIENTES com 1milhão de registros.

    E crio a VIEW com diversos joins:

    VIEW_CLIENTES AS

    SELECT CAMPOS

    INNER JOIN EDENRECOS...

    FROM CLIENTES

    Ai preciso fazer um select filtrando um único cliente, ou então apenas os clientes jurídicos..

    SELECT FROM VIEW_CLIENTES WHERE CODIGO_CLIENTE = 2.

    Esse select usando a VIEW com um where será executado de forma mais rápida do que executar o select inteiro que está dentro da VIEW com um filtro?

    Como será o plano de execução de uma VIEW com where?

    Desculpe não sei se consegui ser bem claro na dúvida.

    Digamos que existe um relatório gigantesco com muitos joins mas que é sempre filtrado por um único cliente. Compensa criar uma VIEW para esse relatório, já que terei que sempre filtrar por esse cliente?

    Obrigado!!!!


    quarta-feira, 6 de novembro de 2013 13:39

Respostas

Todas as Respostas

  • Deleted
    quarta-feira, 6 de novembro de 2013 15:23
  • Deleted
    quarta-feira, 6 de novembro de 2013 15:29
  • Não conheço os índices filtrados, obrigado pela sua resposta!

    Então, a questão é que esse relatório é pesado para todos os clientes. 

    Aconteceu essa noite, de 10 clientes executarem esse mesmo select de relatório. Eu não sei se foi isso, mas hoje o banco travou e tivemos que reiniciar o servidor.

    Então estou buscando formas de melhorar a performance dos selects. Pensei nas views e em passar todos os selects pesados para Stored Procedures, mas fiz um teste simples no meu Sql Management e o mesmo SQL na SP demora mais do que executar diretamente o SQL no Query do Management.

    quarta-feira, 6 de novembro de 2013 19:10
  • Boa tarde Eduardo,

    O proposito principal da view é a restrição do acesso às informações. A view não fornece ganho de performance, com exceção da view indexada/materializa. Quando se trata de problemas de performance, existem muitas variaveis envolvidas, tais como: hardware, rede, queries mal elaboradas, etc... e indexação das tabelas. 

    At.
    Rafael Melo

    quarta-feira, 6 de novembro de 2013 20:06
  • Deleted
    quinta-feira, 7 de novembro de 2013 11:02
  • Obrigado pelas respostas José!

    Vou verificar os links que você me enviou e posto novamente.

    Eu não tenho conhecimento em gerenciamento de banco. Única coisa que usamos do SQL server são as tabelas, e os índices.

    O nosso sistema é como um sistema de cartões VISA, mas em uma escala menor, com uma média de 1 transação por minuto, mas nos horários de pico essa média é de 40/min.

    Obrigado!

    quinta-feira, 7 de novembro de 2013 12:07
  • José Diz, existe alguma forma de entrar diretamente em contato com você?

    Obrigado!

    sexta-feira, 8 de novembro de 2013 13:15
  • Deleted
    sexta-feira, 8 de novembro de 2013 21:21