[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