[firebase-br] Select muito demorado.

Reinaldo Cesar diasmartins em gmail.com
Qui Jul 23 14:42:08 -03 2009


Douglas, conforme vc falou:

CREATE VIEW VW_RECIBOS_MENSAGEIROS(
     DOACOD,
     MENCOD,
     RECNUM,
     RECDDD,
     RECTEL,
     RECSTA,
     RECSTAANT,
     RECULTENTDIA,
     RECULTACUDIA,
     RECVALTOT,
     RECVALDIN,
     RECVALCHQIME,
     RECVALCHQPRE,
     RECLOCCAN,
     RECDATBAICAN,
     RECDATULTMOV,
     RECDATULTMOVANT)
AS
SELECT
       RE1.DOACOD,
       RE1.MENCOD,
       RE1.RECNUM,
       RE1.RECDDD,
       RE1.RECTEL,
       RE1.RECSTA,
       RE1.RECSTAANT,
       RE1.RECULTENTDIA,
       RE1.RECULTACUDIA,
       RE1.RECVALTOT,
       RE1.RECVALDIN,
       RE1.RECVALCHQIME,
       RE1.RECVALCHQPRE,
       RE1.RECLOCCAN,
       RE1.RECDATBAICAN,
       RE1.RECDATULTMOV,
       RE1.RECDATULTMOVANT

     FROM
       RECIBOS RE1

     UNION ALL

     SELECT
       RE2.DOACOD,
       RE2.MENCODTRA,
       RE2.RECNUM,
       RE2.RECDDD,
       RE2.RECTEL,
       CAST('MR' AS VARCHAR(2)),
       CAST(NULL AS VARCHAR(2)),
       RE2.RECDATDIATRA,
       RE2.RECDATACUTRA,
       RE2.RECVALTOT,
       CAST(0 AS NUMERIC(10,2)),
       CAST(0 AS NUMERIC(10,2)),
       CAST(0 AS NUMERIC(10,2)),
       CAST(NULL AS VARCHAR(1)),
       CAST(NULL AS DATE),
       CAST(NULL AS DATE),
       CAST(NULL AS DATE)

     FROM
      RECIBOS RE2

     WHERE
       RE2.MENCODTRA IS NOT NULL

	
*** NÃO SEI SE FICARA MELHOR USANDO CASE
(NO MENCOD E MENCODTRA AO INVEZ DO UNION ***	

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

INDICES

PK_RECIBOS PRIMARY KEY (RECNUM);

FK_DOA_REC_CATCOD    FOREIGN KEY (CATCOD)     REFERENCES CATEGORIAS 
(CATCOD);
FK_DOA_REC_DOACOD    FOREIGN KEY (DOACOD)     REFERENCES DOADORES (DOACOD);
FK_MEN_REC_MENCOD    FOREIGN KEY (MENCOD)     REFERENCES MENSAGEIROS 
(MENCOD);
FK_MOT_REC_MOTCOD    FOREIGN KEY (MOTCOD)     REFERENCES MOTIVOS (MOTCOD);
FK_OPE_REC_OPECODDOA FOREIGN KEY (OPECODDOA)  REFERENCES OPERADORES 
(OPECOD);
FK_OPE_REC_OPECODGRA FOREIGN KEY (OPECODGRA)  REFERENCES OPERADORES 
(OPECOD);
FK_RUA_REC_RUACOD    FOREIGN KEY (RUACOD)     REFERENCES RUAS (RUACOD);
FK_SUP_REC_SUPCOD    FOREIGN KEY (SUPCOD)     REFERENCES SUPERVISORES 
(SUPCOD);
FK_TUR_REC_TURCOD    FOREIGN KEY (TURCOD)     REFERENCES TURNOS (TURCOD);
FK_USU_REC_USUCONC   FOREIGN KEY (RECUSUCONC) REFERENCES USUARIOS (USUCOD);

IDX_RECDATBAICAN ON RECIBOS (RECDATBAICAN);
IDX_RECIBOS_MENTRA ON RECIBOS (MENCODTRA, RECDATDIATRA, RECDATACUTRA);
IDX_RECNUMLOT ON RECIBOS (RECNUMLOT);
IDX_RECSEQ ON RECIBOS (RECSEQ);

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

INSTRUÇÃO SQL

SELECT
    *
FROM
    VW_RECIBOS_MENSAGEIROS REC
WHERE
    (REC.MENCOD <> 0)        AND
    (REC.MENCOD IS NOT NULL) AND
    (REC.RECSTA <> 'CI')     AND
    (
    (REC.RECSTA IN ('BX','CA') AND (REC.RECLOCCAN <> 'C' OR REC.RECLOCCAN IS
NULL) AND REC.RECDATBAICAN = :DATA)
    OR
    (REC.RECSTA IN ('CD','DK','OC') AND REC.RECDATULTMOV = :DATA)
    OR
    (REC.RECSTA = 'CK' AND REC.RECSTAANT = 'OC' AND REC.RECDATULTMOVANT =
:DATA)
    OR (REC.RECSTA = 'MR'
    AND
    (REC.RECULTENTDIA <= :DATA OR REC.RECULTACUDIA <= :DATA))
    )
ORDER BY
       REC.MENCOD

--======================
Plano de execução
PLAN SORT ((REC RE1 NATURAL)
PLAN (REC RE2 NATURAL))

Adapted Plan
PLAN SORT ((REC RE1 NATURAL) PLAN (REC RE2 NATURAL))

Douglas Tosi escreveu:
> 2009/7/23 Reinaldo Cesar <diasmartins-Re5JQEeQqe8AvxtiuMwx3w em public.gmane.org>:
>> Só que o Select é meio "genérico" pois tem que filtrar praticamente boa
>> parte da minha tabela, porém o que achei estranho é que no firebird 1.5 esse
>> select demorava 4,5 minutos e no Firebird 2.0 passou para 17 minutos.
> 
> Manda pra gente o código da view e os índices já existentes nas
> tabelas envolvidas.
> 
> 





Mais detalhes sobre a lista de discussão lista