OTIMIZAR APLICACAO

USUARIO.EXCLUIDOS 21/08/2007 09:35:53
#231784
Pessoal,
Tenho uma aplicação que abre uma view de um banco de dados, esse processo de abertura da view demora 18 segundos e toda vez que é feita alguma alteração em uma das tabelas do banco de dados preciso abrir o recordset novamente pra que as alterações tenham efeito e toda vez que mando abrir o recordset é preciso esperar 18 segundos e essa demora tem dificultado a aceitação da aplicação.
Alguém poderia me dar alguma sugestão de como otimizar essa aplicação?

Obrigada
Ana
USUARIO.EXCLUIDOS 21/08/2007 09:51:05
#231790
coloque a view ai pra gente ver
USUARIO.EXCLUIDOS 21/08/2007 09:59:27
#231793
Essa é a view:

SELECT a.id_card, a.num_revisao AS revisao, a.dsc_folha AS folha, a.dsc_path, a.extensao, a.bloqueado, a.titulo, a.dsc_numerador AS numero, b.elaborador_cartao AS elaborador, c.verificador_cartao AS verificador, d.aprovador_cartao AS aprovador, e.categoria, e.path_principal, f.status, g.centrocusto, h.valor AS "of", a.dat_ctr_inclusao AS data_inclusao
FROM cartao a
JOIN elaborador_cartao b ON a.id_elaborador_cartao = b.id
JOIN verificador_cartao c ON a.id_verificador_cartao = c.id
JOIN aprovador_cartao d ON a.id_aprovador_cartao = d.id
JOIN categoria e ON a.id_categoria = e.id
JOIN status f ON a.id_status = f.id
JOIN centrocusto g ON a.id_centrocusto = g.id
LEFT JOIN campo_categoria j ON j.id_categoria = e.id
LEFT JOIN campo_categoria_of h ON a.id_card = h.id_cartao AND h.id_campo_categoria = j.id
USUARIO.EXCLUIDOS 21/08/2007 10:06:56
#231795
Altere os joins por Where, pois o join é mais lento que o where, isso já deve melhorar um pouco a perfomance, no caso los left joins não há como mudar.


LUIS.HERRERA 21/08/2007 10:51:30
#231825
Outra coisa você está povoando um grid com os dados certo? Então na hora de povoar, desative a propriedade .Redraw = False no início e .Redraw = True no final do carregamento, isso irá acelerar muito a velocidade. Essa propriedade é para MSFlexGrid, se usar outro tem que ver qual é a correspondente.

Depois que fiz isso, minhas consultas com 1000 registros carregam em 3 segundos. Para melhorar eu coloco uma ProgressBar para ajudar o usuário a saber o que ocorre.
USUARIO.EXCLUIDOS 21/08/2007 11:06:47
#231832
Seguindo a sugestão do Sr. Marcos tentei alterar a instrução trocando o join por where onde é possível, mas dá erro informando q há um registro na tabela categoria que não é referenciado pela estrutura montada!
USUARIO.EXCLUIDOS 21/08/2007 11:30:06
#231838
passe o código de como vc fez as mudanças...
USUARIO.EXCLUIDOS 21/08/2007 11:40:18
#231840
Fiz a alteração de join para where:
SELECT a.id_card, a.num_revisao AS revisao, a.dsc_folha AS folha, a.dsc_path, a.extensao, a.bloqueado, a.titulo, a.dsc_numerador AS numero, b.elaborador_cartao AS elaborador, c.verificador_cartao AS verificador, d.aprovador_cartao AS aprovador, e.categoria, e.path_principal, f.status, g.centrocusto, h.valor AS "of", a.dat_ctr_inclusao AS data_inclusao
FROM cartao a, elaborador_cartao b, verificador_cartao c, aprovador_cartao d, categoria e, status f, centrocusto g
LEFT JOIN campo_categoria j ON j.id_categoria = e.id
LEFT JOIN campo_categoria_of h ON a.id_card = h.id_cartao AND h.id_campo_categoria = j.id
WHERE a.id_elaborador_cartao = b.id
AND a.id_verificador_cartao = c.id
AND a.id_aprovador_cartao = d.id
AND a.id_categoria = e.id
AND a.id_status = f.id
AND a.id_centrocusto = g.id

O erro é apontado onde está em negrito
There is an entry for table "e", but it cannot be referenced from this part of the query
USUARIO.EXCLUIDOS 21/08/2007 13:21:21
#231865
Fiz a alteração de join para where:
SELECT a.id_card, a.num_revisao AS revisao, a.dsc_folha AS folha, a.dsc_path, a.extensao, a.bloqueado, a.titulo, a.dsc_numerador AS numero, b.elaborador_cartao AS elaborador, c.verificador_cartao AS verificador, d.aprovador_cartao AS aprovador, e.categoria, e.path_principal, f.status, g.centrocusto, h.valor AS "of", a.dat_ctr_inclusao AS data_inclusao
FROM cartao a, elaborador_cartao b, verificador_cartao c, aprovador_cartao d, status f, centrocusto g, categoria e,
LEFT JOIN campo_categoria j ON j.id_categoria = e.id
LEFT JOIN campo_categoria_of h ON a.id_card = h.id_cartao AND h.id_campo_categoria = j.id
WHERE a.id_elaborador_cartao = b.id
AND a.id_verificador_cartao = c.id
AND a.id_aprovador_cartao = d.id
AND a.id_categoria = e.id
AND a.id_status = f.id
AND a.id_centrocusto = g.id

Tenta desta maneira e veja se funciona.
USUARIO.EXCLUIDOS 21/08/2007 14:42:49
#231884
Marcos,
Tentei executar a instrução conforme vc alterou e ocorre o seguinte erro:

There is an entry for table "a", but it cannot be referenced from this part of the query

O item que contém o erro é:
LEFT JOIN campo_categoria_of h ON a.id_card = h.id_cartao AND h.id_campo_categoria = j.id
USUARIO.EXCLUIDOS 21/08/2007 14:51:51
#231885
vc pode substituir o left join por
WHERE a.id_elaborador_cartao = b.id (+)

Página 1 de 2 [17 registro(s)]
Tópico encerrado , respostas não são mais permitidas