[firebase-br] Ajuda: Porque o FB não está utilizando o índice?
Bruno Freitas
brunofguard-depot em yahoo.com.br
Seg Set 18 14:47:54 -03 2006
Acho que encontrei um bug no FB 2.0 RC4.
Localmente, o acesso fica uma maravilha, o plan está muito melhor, os
índices que deveriam ser utilizados estão realmente sendo utilizados.
Porém, quando se muda o acesso para remoto (colocando-se um IP na string
de conexão, mesmo colocando o IP da máquina local), a história muda de
rumo. O "Server Version" exibido pelo IBExpert está incorreto e não
mostra a string "Firebird 2.0 Release Candidate 4", apenas
"WI-6.0.0.XXXX". E o pior de tudo: O PLAN vira um lixo novamente.
Algumas queries que na conexão local utilizavam o índice, via conexão
remota utilizam o plan NATURAL.
Alguém sabe informar se esse "bug" eh conhecido?
[]s
Bruno Freitas
Bruno Freitas escreveu:
> Olá Eduardo!
>
> Obrigado pela resposta, mas não convenceu. Não sei se vc reparou, no
> segundo teste, mas eu possuo um indice IDX_DATA_HORA_CONSULTA (composto
> pelos dois campos definidos no order by). Dessa forma, para uma melhor
> performance, o indice DEVERIA ser usado sim na query onde o join é
> utilizado. Mas não foi o que aconteceu...
>
> De qualquer forma, descobri o problema: O otimizador do FB 1.5 para
> ordenações de resultados derivado de joins!
>
> Testei aqui com o FireBird 2 RC4 e funcionou perfeitamente, o FB
> utilizou o índice e o resultado veio instantaneamente!
>
> Fica aí a dica!
>
> Resta agora aguardar a versão final do FB2.0!
>
> []s
>
> Bruno Freitas
>
> Eduardo Jedliczka (TeamFB) escreveu:
>
>>É simples...
>>
>>você está retornando TODOS os registros de consulta, e ordenando (sort) por
>>campos que não fazem parte da PK.
>>
>>assim, é mais rápido para o banco processar todos os registros (natural) e
>>usar um sort para montar o resultado do que buscar o índice e repetir o
>>processo já citado...
>>
>>O otimizador às vezes pode não ter o melhor resultado, mas em linhas gerais
>>ele não é tão burro assim...
>>
>>======================
>>Eduardo Jedliczka
>>Membro do TeamFB - FireBase
>>Apucarana - PR
>>======================
>>"Posso não concordar com nada do que dizes.
>>Mas defenderei até a morte o seu direito de dizê-lo"
>>(Voltaire 1694-1778)
>>----- Original Message -----
>>From: "Bruno Freitas" <brunofguard-depot em yahoo.com.br>
>>To: <lista em firebase.com.br>
>>Sent: Thursday, September 14, 2006 5:30 PM
>>Subject: [firebase-br] Ajuda: Porque o FB não está utilizando o índice?
>>
>>
>>Olá pessoal!
>>
>>Alguém poderia me informar porque o FB não está utilizando o índice
>>nessa query?
>>
>>select consultas.*
>>from consultas
>>left join pacientes on pacientes.paciente = consultas.paciente
>>order by data_consulta, hora_consulta
>>
>>Eis o plan utilizado (obtido via IBExpert):
>>
>>Plan
>>PLAN SORT (JOIN (CONSULTAS NATURAL,PACIENTES INDEX (RDB$PRIMARY16)))
>>Adapted Plan
>>PLAN SORT (JOIN (CONSULTAS NATURAL,PACIENTES INDEX (PK_PACIENTES)))
>>
>>Nota: Reparem o "CONSULTAS NATURAL"
>>
>>Agora a query sem o join, o índice é utilizado normalmente:
>>
>>select *
>>from consultas
>>order by data_consulta, hora_consult
>>
>>Eis o plan utilizado (obtido via IBExpert):
>>
>>Plan
>>PLAN (CONSULTAS ORDER IDX_DATA_HORA_CONSULTA)
>>Adapted Plan
>>PLAN (CONSULTAS ORDER IDX_DATA_HORA_CONSULTA)
>>
>>Nota: Reparem o "CONSULTAS ORDER IDX_DATA_HORA_CONSULTA"
>>
>>O FB não utiliza índice para ordenação de joins? Como eu deveria
>>proceder para obter uma performance desejável do meu join?
>>
>>[]s
>>
>>Bruno Freitas
>>
>>
>>______________________________________________
>>FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.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
>>
>>
>>______________________________________________
>>FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.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
>>
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.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
>
Mais detalhes sobre a lista de discussão lista