[firebase-br] Select muito demorado.

Reinaldo Cesar diasmartins em gmail.com
Ter Jul 14 09:50:21 -03 2009


Olá amigos, tenho um Sistema que faz uma abertura de operação usando os
selects abaixo.

Após a migração da versão SS 1.5.4 do Firebird para a versão SS 2.0.5 do
Firebird a abertura de operação que demorava cerca de 4 minutos passou a ser
executada em 17 minutos.

Utilizo o componente DBX com a dll de conexão dbexpint.dll.

Poderia ser a instrução "IN" que quadruplicou o tempo de abertura do
processo ou pode ser algum outro fator??? Pois escutei uma vez que a partir
do 2.0 as instruções com IN passaram a ser não INDEXADAS.

Obrigado

Reinaldo


SELECT
    EOP.OPECOD,
    ((EOP.EOPQTDSALANT +
       (EOP.EOPQTDENTCON + EOP.EOPQTDENTNCO + EOP.EOPQTDENTAGE +
EOP.EOPQTDENTCNF + EOP.EOPQTDENTSAC + EOP.EOPQTDENTRPF) +
       EOP.EOPQTDENTTRF  - EOP.EOPQTDSAITRF) -
       (EOP.EOPQTDSAICON + EOP.EOPQTDPRDNCO + EOP.EOPQTDPRDAGE
+EOP.EOPQTDSAICNF)) AS QTD_OPER,
    ((EOP.EOPVALSALANT +
       (EOP.EOPVALENTCON + EOP.EOPVALENTNCO + EOP.EOPVALENTAGE +
EOP.EOPVALENTCNF + EOP.EOPVALENTSAC + EOP.EOPVALENTRPF) +
       EOP.EOPVALENTTRF  - EOP.EOPVALSAITRF) -
       (EOP.EOPVALSAICONREA + EOP.EOPVALPRDNCO + EOP.EOPVALPRDAGE +
EOP.EOPVALSAICNF)) AS VAL_OPER
FROM
    ESTATISTICA_OPERADORES EOP
WHERE
    EOP.EOPTIP =  :TIPOPE  AND  -- Existem 5 tipos de operação
    EOP.EOPDAT = (SELECT MAX(E.EOPDAT) FROM ESTATISTICA_OPERADORES E
                  WHERE E.OPECOD = EOP.OPECOD AND E.EOPSTA = 'E')

--======================
Plano de execução
PLAN (E ORDER IDX_EOPDAT_OPECOD_DESC INDEX (FK_OPE_EOP_OPECOD))
PLAN (EOP NATURAL)

Adapted Plan
PLAN (E ORDER IDX_EOPDAT_OPECOD_DESC INDEX (FK_OPE_EOP_OPECOD)) PLAN (EOP
NATURAL)
--======================
---------------------------------------------------------------------------------------------------------------------------------

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))
--======================



Mais detalhes sobre a lista de discussão lista