[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