[firebase-br] Ajuda para entender Plan

Douglas Tosi douglasht em gmail.com
Dom Ago 10 18:44:55 -03 2008


2008/8/10 Fausto <fausto.s.a em uol.com.br>:
> Alguém poderia me explicar o porque que em uma ele use e em outra não?

Manda pra gente o metadado das tabelas e a seletividade dos índices
delas. Dá pra avaliar melhor com eles.

Quando você faz group by ITE.PEDCOD o firebird pode usar o índice
nesse campo para navegar a tabela, daí o plano ITE ORDER PK_PEDITEM.
Só que ele ainda está carregando a tabela toda. O seu where não está
usando índice nenhum.

Já no primeiro group by, como o ITE.PEDCOD é o último campo do
agrupamento, não adianta o firebird navegar a tabela usando o índice.
A ordem que ele precisa é ITE.ITENOT,ITE.ITEDFT,ITE.PEDCOD. Se a
seletividade de ITE.ITENOT for boa você pode criar um índice nele, ou
então criar um índice composto de ITE.ITENOT,ITE.ITEDFT ou mesmo
composto dos três campos. Mas você tem que avaliar os efeitos
colaterais.

Agora isto tudo só pra colocar um índice pra navegar a tabela. De
qualquer maneira, não está havendo indexação para filtrar a massa de
dados dessa tabela antes de fundí-la (join) com as outras. Se você
tivesse um índice bem seletivo em ITE.ITEDFT ou então ITE.ITEDCN, é
*possível* que ficasse bem mais rápido que o índice de navegação.

Precisa testar e fazer um carinho no otimizador do FB pra ver o que
ele faz pra você. ;)

hth,

-- 
Douglas Tosi
www.sinatica.com




Mais detalhes sobre a lista de discussão lista