[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