[firebase-br] Ajuda para entender Plan

Fausto fausto.s.a em uol.com.br
Dom Ago 10 10:51:50 -03 2008


Amigos, antes de tudo para os pais..
Um feliz dia dos pais, que neste dia o espirito de quem um dia já foi 
somente filho, possa ajuda-los a entender melhor os seus filhos e com 
isso ajudar na criação de verdadeiros cidadãos e homens de bem.
Seguinte..
Tenho duas Sqls distintas uma para retornar itens em aberto de um pedido 
e a outra itens baixados.
São elas:
*Itens Baixados:*
SELECT ITE.ITENOT,ITE.ITEDFT, SUM(ITE.ITEEMB * ITE.ITEQDE) AS TOTQDE,
   SUM(((ITE.ITEEMB * ITE.ITEQDE) * ITE.MODPRE) * (1 - (PED.PEDDES / 
100))) AS TOTVLR,
   ITE.PEDCOD
FROM
   PEDITEM ITE
   INNER JOIN PEDIDOS PED ON (ITE.PEDCOD = PED.PEDCOD)
   INNER JOIN CLIENTES CLI ON (PED.CLICOD = CLI.CLICOD)
WHERE
   (ITE.ITEDFT  IS NOT NULL ) AND
   (ITE.ITEDCN IS NULL)
GROUP BY ITE.ITENOT,ITE.ITEDFT,ITE.PEDCOD

*Itens em aberto:*
SELECT
   SUM(ITE.ITEEMB * ITE.ITEQDE) AS QDEABE,
   SUM(((ITE.ITEEMB * ITE.ITEQDE) * ITE.MODPRE) * (1 - (PED.PEDDES / 
100))) AS VLRABE,
   ITE.PEDCOD
FROM
   PEDITEM ITE
   INNER JOIN PEDIDOS PED ON (ITE.PEDCOD = PED.PEDCOD)
   INNER JOIN CLIENTES CLI ON (PED.CLICOD = CLI.CLICOD)
WHERE   (ITE.ITEDFT IS NULL)
    AND  (ITE.ITEDCN IS NULL)
GROUP BY
   ITE.PEDCOD
Na primeira eu tenho o seguinte plano de execução:
PLAN SORT (JOIN (*ITE NATURAL*,PED INDEX (PK_PEDIDOS),CLI INDEX 
PK_CLIENTES)))
Ou seja ele não usa nenhum indice da tabela Itens.
Já na segunda Sql tenho este plano:
PLAN JOIN (*ITE ORDER PK_PEDITEM*,PED INDEX (PK_PEDIDOS),CLI INDEX* 
(PK_CLIENTES))

Notem que ele usa o indice da tabel Itens.
Alguém poderia me explicar o porque que em uma ele use e em outra não?
Neste caso ainda é Firebird 1.5
-- 
Fausto Alves
Franca-SP
Enviado pelo Mozilla Thunderbird
http://br.mozdev.org/thunderbird





Mais detalhes sobre a lista de discussão lista