Usuário com melhor resposta
Dúvida de funcionamento de uma VIEW com WHERE

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!!!!
Respostas
-
Deleted
- Marcado como Resposta Eduardo Moura Schaukoski quinta-feira, 7 de novembro de 2013 14:10
Todas as Respostas
-
-
-
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.
-
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 -
Deleted
- Marcado como Resposta Eduardo Moura Schaukoski quinta-feira, 7 de novembro de 2013 14:10
-
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!
-
-