RES: [firebase-br] Otimização de instruções
Jony
jonyridel em yahoo.com.br
Ter Ago 30 11:46:11 -03 2005
Felipe o in neste caso fica mais lento porque para cada linha da tabela
maquinas será executado o Select da SubQuery. Talvez mudando o "in" para
"Exist" fique mais rápido pois desta forma ao encontrar o valor igual a
chave pesquisada a subquery e finalizada e no caso do in ela roda até o
final.
Outra forma de deixar rápido seria utilizar uma procedure onde vc faria um
for com a Subquery executando o Update a cada linha retornada.
Espero ter ajudado,
----------------------------
Jony Ridel
Grupo Êxito - Salvador - BA
----------------------------
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Felipe Giotto
Enviada em: terça-feira, 30 de agosto de 2005 10:34
Para: lista em firebase.com.br
Assunto: [firebase-br] Otimização de instruções
Olá pessoal.
Passei por uma situação curiosa, só gostaria de tirar uma dúvida... Eu
estava rodando um UPDATE em uma máquina de testes nossa, a nossa
"carrocinha"!! É um Pentium 233, 32MB RAM, Windows 98, FB 1.5.2....
Rodei uma instrução parecida com: UPDATE MAQUINAS SET AUTORIZADO=1 WHERE
CODCLIENTE IN (SELECT CODIGO FROM CLIENTES WHERE
PAGAMENTO>'01/01/2005')... Esse select interno retorna aproximadamente
200 clientes. O UPDATE deve atualizar aproximadamente 700 registros que
satisfazem a condição... Rodando dessa forma, ele levou uns 5 minutos
para terminar... Depois, eu tentei fazer de outra forma... Primeiro
rodei o SELECT, peguei os dados e montei, com um programa, um SQL que
utilizava centenas de "OR"s ao invés de utilizar o subconjunto com o
SELECT.. Depois de rodar o SELECT, eu criei um SQL da seguinte forma:
UPDATE MAQUINAS SET AUTORIZADO=1 WHERE ( (CODCLIENTE=1) OR
(CODCLIENTE=5) OR (CODCLIENTE=6) OR (CODCLIENTE=10) OR ....... OR
(CODCLIENTE=450)), enfim.. Eu indiquei todos os CODCLIENTE que deveriam
ser atualizados através de muitos OR na condição.... Dessa forma, o
UPDATE demorou menos de 3 segundos para ser executado!!! Existe alguma
forma muito diferente que o Firebird utiliza para fazer esse UPDATE??
Por que a instrução com o IN é muuuuuuito mais demorada que a instrução
com os ORs??? Como posso fazer para saber a maneira mais rápida para
otimizar minhas consultas/alterações/inserções???
Desde já agradeço,
--
Felipe Luiz Christófolli Giotto
Meta Tecnologia em Software, Ltda
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
--
No virus found in this incoming message.
Checked by AVG Anti-Virus.
Version: 7.0.344 / Virus Database: 267.10.17/84 - Release Date: 29/8/2005
--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.344 / Virus Database: 267.10.17/84 - Release Date: 29/8/2005
_______________________________________________________
Yahoo! Acesso Grátis - Internet rápida e grátis.
Instale o discador agora! http://br.acesso.yahoo.com/
Mais detalhes sobre a lista de discussão lista