Ajuda pra montar um SQL mais rápido

Fellipe Henrique fellipe.h em uol.com.br
Sex Fev 22 09:05:31 -03 2008


Valeu pessoal, funcionou muitíssimo melhor com o INNER...

Agora.. alguém poderia me explicar a diferença entre o INNER e o LEFT join?

[]s

Fellipe H.

"Fellipe Henrique" <fellipe.h em uol.com.br> 
escreveu na mensagem news:fpkjki$eo1$1 em ger.gmane.org...
> Olá amigos, tenho um SQL, porém ele demora muito pra retornar os dados, já 
> tentei adicionar indices e nada. O que eu quero, é trazer os clientes 
> ATIVOS,  QUE COMPRARAM, UM DETERMINADO PRODUTO  em um determinado periodo. 
> segue o meu SQL, hoje ele demora por volta de uns 2 minutos pra trazer  no 
> máximo uns 10 registros. Se alguém puder me ajudar ficarei extremamente 
> grato.
>
> Desde já agradeço
> Fellipe H.
>
> SQL:
> SELECT vp2.data_emissao, vp2.data_faturamento ,
>      VP2.idvenda_pedido , C.STATUS ,VP2.IDCLIENTE,
>      C.RAZAO_SOCIAL, prod.idgrupo, prod.idsubgrupo , prod.referencia, 
> prod.descricao,
>      vpi.preco_unit, vpi.qnt, vp2.idrepresentante , rep.nome, 
> gru.descricao as fk_nomegru,
>      ( vpi.preco_unit * vpi.qnt ) as fk_total,
>      sub.descricao as fk_nomesub,
>      ( SELECT FIRST 1 CC.TELEFONE  FROM CLIENTE_CONTATOS CC
>        WHERE CC.IDCLIENTE = VP2.IDCLIENTE  ) AS FK_FONE,
>      ( SELECT FIRST 1 CC.NOME FROM CLIENTE_CONTATOS CC
>        WHERE CC.IDCLIENTE = VP2.IDCLIENTE  ) AS FK_CONTATO ,
>      C.CIDADE , C.ENDERECO
> FROM VENDA_PEDIDO VP2
> LEFT JOIN CLIENTE C ON (C.IDCLIENTE = VP2.IDCLIENTE)
> LEFT JOIN venda_pedido_itens VPI ON (vpi.idvenda_pedido = 
> VP2.idvenda_pedido )
> LEFT JOIN produto prod ON (prod.idproduto = VPi.idproduto )
> LEFT JOIN grupo gru ON ( gru.idgrupo = prod.idgrupo )
> LEFT JOIN sub_grupo sub ON ( sub.idsub_grupo = prod.idsubgrupo )
> LEFT JOIN representante rep ON ( rep.idrepresentante = 
> vp2.idrepresentante )
> WHERE ( VP2.IDCLIENTE IN( SELECT VP1.IDCLIENTE FROM VENDA_PEDIDO_ITENS 
> VPI1
>                          LEFT JOIN VENDA_PEDIDO VP1 ON (VP1.IDVENDA_PEDIDO 
> = VPI1.IDVENDA_PEDIDO)
>                          LEFT JOIN PRODUTO P1 ON (P1.IDPRODUTO = 
> VPI1.IDPRODUTO)
>                          WHERE ( VP1.DATA_EMISSAO BETWEEN :PDATA1 AND 
> :PDATA2 ) )
>  AND ( C.STATUS =  'A')
>  AND ( VP2.DATA_EMISSAO BETWEEN :PDATA1 AND :PDATA2 )
>
>
> As tabelas principais:
>
> CREATE TABLE VENDA_PEDIDO (
>    IDVENDA_PEDIDO     INTEGER NOT NULL,
>    DATA_CADASTRO      DATE NOT NULL,
>    DATA_EMISSAO       DATE NOT NULL,
>    DATA_FATURAMENTO   DATE,
>    HORA_FATURAMENTO   TIME,
>    PROGRAMADO         CHAR(1) COLLATE PXW_INTL850,
>    STATUS             CHAR(1) NOT NULL COLLATE PXW_INTL850,
>    TIPO_PEDIDO        CHAR(1) COLLATE PXW_INTL850,
>    TIPO_NOTA          CHAR(1) COLLATE PXW_INTL850,
>    IDCLIENTE          INTEGER NOT NULL,
>    IDFUNCIONARIO      INTEGER,
>    IDREPRESENTANTE    INTEGER,
>    IDVENCIMENTO       INTEGER,
>    IDCFOP             INTEGER,
>    IDBANCO            INTEGER,
>    IDTRANPORTADORA    INTEGER,
>    TRANS_TIPOFRETE    SMALLINT,
>    TRANS_VOL_QNT      D_QNT,
>    TRANS_VOL_ESPECIE  VARCHAR(10) COLLATE PXW_INTL850,
>    TRANS_VOL_MARCA    VARCHAR(10) COLLATE PXW_INTL850,
>    TRANS_VOL_NUM      VARCHAR(10) COLLATE PXW_INTL850,
>    TRANS_VOL_PESOBRU  D_QNT,
>    TRANS_VOL_PESOLIQ  D_QNT,
>    TRANS_IDMENSAGEM   INTEGER,
>    TRANS_MENSAGEM     BLOB SUB_TYPE 1 SEGMENT SIZE 80,
>    PERC_DESC          D_DINHEIRO NOT NULL,
>    VLR_DESC           D_DINHEIRO NOT NULL,
>    PERC_ACREC         D_DINHEIRO NOT NULL,
>    VLR_ACREC          D_DINHEIRO NOT NULL,
>    VLR_BASE_CALC      D_DINHEIRO,
>    VLR_BASE_ST        D_DINHEIRO,
>    VLR_ICMS_ST        D_DINHEIRO,
>    VLR_ICMS           D_DINHEIRO,
>    VLR_PRODUTO        D_DINHEIRO NOT NULL,
>    VLR_TOTAL          D_DINHEIRO NOT NULL,
>    QNT_TOTAL_PROD     INTEGER,
>    ENTR_LOGRADOURO    D_ENDERECO,
>    ENTR_BAIRRO        D_BAIRRO,
>    ENTR_CIDADE        D_CIDADE,
>    ENTR_CEP           D_CEP,
>    ENTR_UF            CHAR(2) COLLATE PXW_INTL850,
>    ENTR_PONTOREF      D_DESCRICAO,
>    FRETE              D_DINHEIRO,
>    SEGURO             D_DINHEIRO,
>    OUTRAS_DESP        D_DINHEIRO,
>    PERC_COMISSAO      D_DINHEIRO,
>    VLR_COMISSAO       D_DINHEIRO,
>    MAO_OBRA           D_DINHEIRO,
>    PERC_ISS           D_DINHEIRO,
>    VLR_ISS            D_DINHEIRO,
>    IPI                D_DINHEIRO,
>    OBS                BLOB SUB_TYPE 1 SEGMENT SIZE 80,
>    IDCAIXA            INTEGER,
>    IDCONTA_RECEBER    INTEGER,
>    FRENTE_CAIXA       SMALLINT,
>    TIPO_FRETE         SMALLINT,
>    NUM_NOTA           VARCHAR(10) COLLATE PXW_INTL850,
>    TOTAL_PRECO_CUSTO  D_DINHEIRO,
>    PERC_LUCRO         D_DINHEIRO,
>    IDCFOP_SERV        INTEGER,
>    IDPEDIDO_INTERNO   INTEGER,
>    MARCAPEDIDO        VARCHAR(1)
> );
>
>
> CREATE TABLE VENDA_PEDIDO_ITENS (
>    IDVENDA_PEDIDO_ITENS        INTEGER NOT NULL,
>    IDVENDA_PEDIDO              INTEGER NOT NULL,
>    IDPRODUTO                   INTEGER NOT NULL,
>    IDCFOP                      INTEGER,
>    PEDIDO_PROGRAMADO           CHAR(1) COLLATE PXW_INTL850,
>    QNT                         D_QNT NOT NULL,
>    QNT_PENDENTE                D_QNT,
>    QNT_DEVOLVIDA               D_QNT,
>    PRECO_UNIT                  D_DINHEIRO NOT NULL,
>    PRECO_CUSTO                 D_DINHEIRO,
>    PERC_DESC                   D_DINHEIRO,
>    VLR_DESC                    D_DINHEIRO,
>    PERC_ACREC                  D_DINHEIRO,
>    VLR_ACREC                   D_DINHEIRO,
>    VALOR_TOTAL                 D_DINHEIRO NOT NULL,
>    SI_PERC_BASE_CALC           D_DINHEIRO,
>    SI_VLR_BASE_CALC            D_DINHEIRO,
>    SI_FRETE                    D_DINHEIRO,
>    SI_SEGURO                   D_DINHEIRO,
>    SI_OUTRAS_DESP              D_DINHEIRO,
>    SI_MAO_OBRA                 D_DINHEIRO,
>    SI_VLR_ICMS                 D_DINHEIRO,
>    SI_VLR_DESC                 D_DINHEIRO,
>    SI_VLR_ACREC                D_DINHEIRO,
>    SI_VLR_IPI                  D_DINHEIRO,
>    SI_ALIQUOTA                 D_DINHEIRO,
>    SI_CST                      CHAR(3) COLLATE PXW_INTL850,
>    SI_COD_TRIB                 CHAR(1) COLLATE PXW_INTL850,
>    SI_NUM_ITEM                 SMALLINT,
>    SI_ST_ALIQ                  D_DINHEIRO,
>    SI_ST_BASE                  D_DINHEIRO,
>    SI_ST_ICMS                  D_DINHEIRO,
>    ULT_CUSTO_MEDIO_PROD        D_DINHEIRO,
>    PRECO_CUSTO_MEDIO           D_DINHEIRO,
>    PERC_COMIS_PROD             D_DINHEIRO,
>    VLR_COMIS_PROD              D_DINHEIRO,
>    IDCOD_TRIBUTARIO_ALIQUOTAS  INTEGER
> );
>
>
>
>
> /******************************************************************************/
> /****                             Primary Keys ****/
> /******************************************************************************/
>
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT PK_VENDA_PEDIDO PRIMARY KEY 
> (IDVENDA_PEDIDO);
> ALTER TABLE VENDA_PEDIDO_ITENS ADD CONSTRAINT PK_VENDA_PEDIDO_ITENS 
> PRIMARY KEY (IDVENDA_PEDIDO_ITENS);
>
>
> /******************************************************************************/
> /****                             Foreign Keys ****/
> /******************************************************************************/
>
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_1 FOREIGN KEY 
> (IDCLIENTE) REFERENCES CLIENTE (IDCLIENTE);
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_2 FOREIGN KEY 
> (IDREPRESENTANTE) REFERENCES REPRESENTANTE (IDREPRESENTANTE);
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_3 FOREIGN KEY 
> (IDVENCIMENTO) REFERENCES VENCIMENTO (IDVENCIMENTO);
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_4 FOREIGN KEY 
> (IDCFOP) REFERENCES CFOP (IDCFOP);
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_5 FOREIGN KEY 
> (IDTRANPORTADORA) REFERENCES TRANSPORTADORA (IDTRANSPORTADORA);
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_6 FOREIGN KEY 
> (IDFUNCIONARIO) REFERENCES FUNCIONARIO (IDFUNCIONARIO);
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_7 FOREIGN KEY 
> (TRANS_IDMENSAGEM) REFERENCES MENSAGEM (IDMENSAGEM);
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_8 FOREIGN KEY 
> (IDCFOP_SERV) REFERENCES CFOP (IDCFOP);
> ALTER TABLE VENDA_PEDIDO_ITENS ADD CONSTRAINT FK_VENDA_PEDIDO_ITENS_1 
> FOREIGN KEY (IDVENDA_PEDIDO) REFERENCES VENDA_PEDIDO (IDVENDA_PEDIDO) ON 
> DELETE CASCADE;
> ALTER TABLE VENDA_PEDIDO_ITENS ADD CONSTRAINT FK_VENDA_PEDIDO_ITENS_2 
> FOREIGN KEY (IDPRODUTO) REFERENCES PRODUTO (IDPRODUTO);
> ALTER TABLE VENDA_PEDIDO_ITENS ADD CONSTRAINT FK_VENDA_PEDIDO_ITENS_3 
> FOREIGN KEY (IDCOD_TRIBUTARIO_ALIQUOTAS) REFERENCES 
> COD_TRIBUTARIO_ALIQUOTAS (IDCOD_TRIBUTARIO_ALIQUOTAS);
>
>
>
>


--------------------------------------------------------------------------------


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 







Mais detalhes sobre a lista de discussão lista