[firebase-br] CTE com Left Join, bug do Firebird?

Anderson Barretta sistemas em prevedello.com.br
Sex Maio 26 11:50:19 -03 2017


olá Gladiston,

fui mais além nos meus testes aqui,
e acredito que o Firebird está se perdendo em algum momento
ao buscar o melhor Plan quando se usa CTe + Left join

fiz um select super simples, como o ex abaixo.
o select da Cte, executando seperada, traz menos de 2.000 registro em 1 seg
o select de fora traz 10.000 registros em 1 seg

se uso join simples entre eles o fb usa o
PLAN JOIN (VL VP ORDER FK_VENDAPRODUTOS_1 INDEX (PK_VENDAPRODUTOS), P INDEX
(PK_PRODUTOS))

usando o indice  do where   (VP.CODVENDA_VENDAPRODUTO > 711999)
corretamente.

mas quando  uso Left join o plan da CTE muda totalmente
e ele usa um indice do campo  CODPRODUTO_VENDAPRODUTO
trazendo 8 milhoes de registros.

MAS se eu força a CTE a usar o plan
  -- PLAN (VP ORDER FK_VENDAPRODUTOS_1 INDEX (PK_VENDAPRODUTOS))
o select se torna super rapido. idependente de ser join ou Left join.

with VendLab as
 (
   SELECT
     (VP.CODPRODUTO_VENDAPRODUTO) as CODPR,
     Sum (Vp.SUBTOTAL_VENDAPRODUTO) as SUBTOTAL
    FROM VENDAPRODUTOS VP
    WHERE
     (VP.CODVENDA_VENDAPRODUTO > 711999)
     group by 1
     -- PLAN (VP ORDER FK_VENDAPRODUTOS_1 INDEX (PK_VENDAPRODUTOS))
  )
  SELECT
  COD_PRODUTO,
  VL.SUBTOTAL
  FROM PRODUTOS P join  VendLab VL on VL.CODPR= p.COD_PRODUTO




-- 

<http://www.prevedello.com.br>


Anderson Barretta
Dpto: Desenvolvimento

Fone: (55) 3744 3880
Skype: sistemas em prevedello.com.br



Mais detalhes sobre a lista de discussão lista