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

Carlos H. Cantu listas em warmboot.com.br
Qui Maio 25 17:42:56 -03 2017


Porque vc NÃO está usando JOINs pra fazer a junções na query da CTE?
Essa forma de ligar as tabelas (pelo where) pode confundir o
otimizador, e isso pode estar fazendo com que ele não use os indices
apropriados.

CTE e tabelas temporárias não tem nada a ver uma coisa com a outra.

[]s
Carlos H. Cantu
eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br

AB> boa tarde pessoal,
AB> algum tempo tenho me deparado com lentidão em selects, teoricamente
AB> simples,
AB> que utilizam CTE + Left join.
AB> como no ex. abaixo.

AB> usando CTE com Join simples,  demora menos de 1 seg para realizar e faz
AB> read em 1.350 registros.
AB> mas com Left join demora 2 minutos e faz read em 12.864.358.
AB> sendo q minha tabela de laboratórios tem apenas 500 registros.

AB> se eu transformo a CTe em uma tabela temporária antes e executo com LEFT
AB> join fica super rápida.
AB> no meu entender as CTe deveriam se comportar como uma tabela temporária
AB> ,mas não é isso que ocorre...

AB> Alguem já passou por isso?
AB> é algum BUG do firebird?
AB> ou meu entendimento está errado?

AB> SQL:

AB> with VendLab as
AB>  (
AB>    SELECT
AB>       P.CODFABRICANTE_PRODUTO AS CODLAB,
AB>       Sum (Vp.QUANT_VENDAPRODUTO- VP.QNTDEVOLVIDA_VENDAPRODUTO) as Qnt,
AB>       Sum (Vp.SUBTOTAL_VENDAPRODUTO) as SUBTOTAL
AB>     FROM VENDAPRODUTOS VP, VENDAS V, PRODUTOS P
AB>     WHERE
AB>       VP.CODVENDA_VENDAPRODUTO = V.COD_VENDA AND
AB>       VP.CODPRODUTO_VENDAPRODUTO = P.COD_PRODUTO AND
AB>       (V.DATA_VENDA BETWEEN '01.05.2017' AND '30.05.2017')
AB>       group by 1
AB>   )
AB>     Select L.COD_LABORATORIO AS CODLAB,
AB>     SUM(VL.QNT) AS QNT,
AB>     SUM(VL.SUBTOTAL) AS SUBTOTAL
AB>     FROM ( LABORATORIOS L *LEFT *JOIN VendLab VL ON (VL.CODLAB =
AB> L.COD_LABORATORIO) )
AB>     group by 1







Mais detalhes sobre a lista de discussão lista