[firebase-br] Ajuda: Porque o FB não está utilizando o índice?
Bruno Freitas
brunofguard-depot em yahoo.com.br
Sex Set 15 14:27:04 -03 2006
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
>
Mais detalhes sobre a lista de discussão lista