[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