[firebase-br] Campo calculado - vantagens x desvantagens

Hélio Oliveira hpensador em gmail.com
Sex Fev 6 11:43:15 -03 2015


Bom dia Colegas!

Estou trabalhando no desenvolvimento de um sistema e penso em usar 
bastante o recurso de campos calculados em varias colunas de uma tabela. 
Hoje para teste escrevi a instrução SQL de um dos campos calculados, 
vide abaixo:

SELECT SUM(X.VALOR) - (SELECT SUM(X.VALOR)
                        FROM FOLHA X
                          JOIN FOLHA_BASE FB ON (FB.COD_EMPRESA = 
X.COD_EMPRESA
                                             AND FB.MES = X.MES
                                             AND FB.ANO = X.ANO
                                             AND FB.SEQUENCIA = X.SEQUENCIA
                                             AND FB.MATRICULA = X.MATRICULA)
                          JOIN EVENTO E ON (E.COD_EVENTO = X.COD_EVENTO
                                        AND E.COD_EMPRESA = X.COD_EMPRESA
                                        AND E.ESTORNA_BASE_INSS = 'S')
                          JOIN PARAMETRO P ON (P.COD_EMPRESA = X.COD_EMPRESA
                                           AND P.FOLHA_MES = X.MES
                                           AND P.FOLHA_ANO = X.ANO
                                           AND P.FOLHA_SEQUENCIA = 
X.SEQUENCIA)
                        WHERE X.COD_EMPRESA = (SELECT 
RDB$GET_CONTEXT('USER_SESSION', 'id_empresa')
                                               FROM RDB$DATABASE))
FROM FOLHA X
   JOIN FOLHA_BASE FB ON (FB.COD_EMPRESA = X.COD_EMPRESA
                      AND FB.MES = X.MES
                      AND FB.ANO = X.ANO
                      AND FB.SEQUENCIA = X.SEQUENCIA
                      AND FB.MATRICULA = X.MATRICULA)
   JOIN EVENTO E ON (E.COD_EVENTO = X.COD_EVENTO
                 AND E.COD_EMPRESA = X.COD_EMPRESA
                 AND E.INSS = 'S')
   JOIN PARAMETRO P ON (P.COD_EMPRESA = X.COD_EMPRESA
                    AND P.FOLHA_MES = X.MES
                    AND P.FOLHA_ANO = X.ANO
                    AND P.FOLHA_SEQUENCIA = X.SEQUENCIA)
WHERE X.COD_EMPRESA = (SELECT RDB$GET_CONTEXT('USER_SESSION', 'id_empresa')
                        FROM RDB$DATABASE);

*Executando o mesmo no IBExpert obtenho o seguinte PLAN (Observação a 
base de dados ainda está vazia).*

Plan
PLAN (RDB$DATABASE NATURAL)
PLAN (RDB$DATABASE NATURAL)
PLAN JOIN (FB NATURAL, X INDEX (PK_FOLHA), E INDEX (PK_EVENTO), P INDEX 
(PK_PARAMETRO))
PLAN JOIN (FB NATURAL, X INDEX (PK_FOLHA), E INDEX (PK_EVENTO), P INDEX 
(PK_PARAMETRO))

------ Performance info ------
Prepare time = 16ms
Execute time = 0ms
Avg fetch time = 0,00 ms
Current memory = 10.393.568
Max memory = 12.038.880
Memory buffers = 2.048
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 38

Gostaria da opinião dos nobres, com as vossas experiências posso ter 
problema de lentidão em função desses vários campos calculados?

Será uma vantagem ou desvantagem?

[ ]'s,
Hélio Oliveira





Mais detalhes sobre a lista de discussão lista