ajuda em consulta

Firebird

30/10/2010

tenho o seguinte sql:    SELECT v.DTVENDA AS DATA,
  v.NUMDOC, v.CLIENTE, v.PRAZO, v.NotaFiscal,
  i.PRODUTO, i.QTDE AS SAIDA, i.VALOR, i.TOTPROD, i.TIPOVENDA,i.VALORDESC
  FROM EST007 v INNER JOIN EST008 i  ON i.EMPRESA = v.EMPRESA
  AND i.ITEMVENDACONTADOR = v.VENDACONTADOR
  WHERE v.Empresa = 1
  AND v.DtVenda >= '01.01.0001'
  AND v.DtVenda <= '30.09.2010'
  AND COALESCE(v.Cancelado,'N') <> 'S'
  AND COALESCE(v.BAIXAR,'') <> 'D'
  AND COALESCE(v.MOVIMENTAESTOQUE,'S') <> 'N'
  AND COALESCE(i.TIPOVENDA,'') <> 'F'
  AND i.Produto = '01001'
  AND i.Empresa = v.Empresa   se o produto existe na tabela i o  resultado do select é rapido se nao existe o resultado é lento. por favor me ajudem  
André Santos

André Santos

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

30/10/2010

SELECT
  v.DTVENDA AS DATA,
  v.NUMDOC, v.CLIENTE, v.PRAZO, v.NotaFiscal,
  i.PRODUTO, i.QTDE AS SAIDA, i.VALOR, i.TOTPROD, i.TIPOVENDA,i.VALORDESC
FROM
  EST007 v
INNER JOIN
  EST008 i ON i.EMPRESA = v.EMPRESA
     AND i.ITEMVENDACONTADOR = v.VENDACONTADOR
WHERE v.Empresa = 1
  AND v.DtVenda >= '01.01.0001'
  AND v.DtVenda <= '30.09.2010'
  AND COALESCE(v.Cancelado,'N') <> 'S'
  AND COALESCE(v.BAIXAR,'') <> 'D'
  AND COALESCE(v.MOVIMENTAESTOQUE,'S') <> 'N'
  AND COALESCE(i.TIPOVENDA,'') <> 'F'
  AND i.Produto = '01001'
  AND i.Empresa = v.Empresa  <----- desnecessário



tente:

SELECT
  v.DTVENDA AS DATA,
  v.NUMDOC, v.CLIENTE, v.PRAZO, v.NotaFiscal,
  i.PRODUTO, i.QTDE AS SAIDA, i.VALOR, i.TOTPROD, i.TIPOVENDA,i.VALORDESC
FROM
  EST007 v
INNER JOIN
  EST008 i ON i.EMPRESA = v.EMPRESA
    AND i.ITEMVENDACONTADOR = v.VENDACONTADOR
    AND COALESCE(i.TIPOVENDA,' ') <> 'F'
WHERE v.Empresa = 1
  AND v.DtVenda >= '01.01.0001'
  AND v.DtVenda <= '30.09.2010'
  AND COALESCE(v.Cancelado,'N') <> 'S'
  AND COALESCE(v.BAIXAR,' ') <> 'D'
  AND COALESCE(v.MOVIMENTAESTOQUE,'S') <> 'N'
  AND i.Produto = '01001'

a performance depende dos índices criados. sempre que possível crie índices para todos os campos utilizados nos relacionamentos (EST008, campos EMPRESA e ITEMVENDACONTADOR) e também nas condições de filtro (EST007, campos EMPRESA, DTVENDA, TIPOVENDA; EST008, campo PRODUTO)

GOSTEI 0
André Santos

André Santos

30/10/2010

tenho o seguinte sql:    SELECT v.DTVENDA AS DATA,
  v.NUMDOC, v.CLIENTE, v.PRAZO, v.NotaFiscal,
  i.PRODUTO, i.QTDE AS SAIDA, i.VALOR, i.TOTPROD, i.TIPOVENDA,i.VALORDESC
  FROM EST007 v INNER JOIN EST008 i  ON i.EMPRESA = v.EMPRESA
  AND i.ITEMVENDACONTADOR = v.VENDACONTADOR
  WHERE v.Empresa = 1
  AND v.DtVenda >= '01.01.0001'
  AND v.DtVenda <= '30.09.2010'
  AND COALESCE(v.Cancelado,'N') <> 'S'
  AND COALESCE(v.BAIXAR,'') <> 'D'
  AND COALESCE(v.MOVIMENTAESTOQUE,'S') <> 'N'
  AND COALESCE(i.TIPOVENDA,'') <> 'F'
  AND i.Produto = '01001'
  AND i.Empresa = v.Empresa   se o produto existe na tabela i o  resultado do select é rapido se nao existe o resultado é lento. por favor me ajudem  
  Os Indices das tabelas pra vcs verem
GOSTEI 0
POSTAR