[firebase-br] Plan - Natural (Order By)

Sandro Souza escovadordebits em gmail.com
Qua Mar 17 13:21:05 -03 2010


Bom dia/tarde Felipe.

Grande Felipe, como você mesmo citou, já existe um índice para a 
coluna/campo DATA_CHQDEV, e sendo assim, quando você manda ordenar por 
esse campo, esse índice é utilizado.

Nesse outro caso, você está mandando ordenar pelo par DATA_CHQDEV e 
NUMERO_CHQREC, e nessa situação o índice anterior não tem como ajudar 
mesmo, pois a ordenação não é mais apenas daquele campo específico, mas 
sim de dois campos, que não tem índice ainda.

Tudo bem que existe um índice para o campo DATA_CHQDEV, mas a ordenação 
se torna NATURAL por conta do segundo campo, formando uma nova 
combinação, e dessa forma, a ordenação já se torna diferente.

Ordenar pelo campo A não é o mesmo que ordenar pelo campo A e B, e sendo 
assim, se não houver um índice para essa nova combinação, nenhum índice 
será utilizado, e a ordenação fica como NATURAL (sequencial) mesmo.

Faça o seguinte, apenas crie um novo índice envolvendo esses dois 
campos, DATA_CHQDEV e NUMERO_CHQREC, e repita o teste.

Espero ter ajudado mais que atrapalhado. :D

Felipe Aron escreveu:
> Pessoal estou apanhando pra entender o porque o plan da minha SQL não está
> usando o índice. Minha SQL é a seguinte:
>
> select c.numero_chqrec
>   from chequesdevol cd
>         inner join chequesrec c on (cd.codcheque_chqdev = c.codigo_chqrec)
> where cd.valordeve_chqdev > 0
>   and cd.codstatus_chqdev = 1
> order by cd.data_chqdev, c.numero_chqrec
>
> Existe um índice para o campo "data_chqdev" ascendente. Se eu usar no order
> by somente o campo "data_chqdev" ele utiliza indice, já colocando um segundo
> campo "numero_chqrec" o plan deixa de usar o indice e coloca como NATURAL o
> Join ChequesDevol.
>
> Alguém sabe como contornar essa situação?
>
>
>   




Mais detalhes sobre a lista de discussão lista