[firebase-br] Campo calculado - vantagens x desvantagens

Carlos H. Cantu listas em warmboot.com.br
Sex Fev 6 13:42:35 -03 2015


Tenha certeza de que esses campos calculados não afetarão
negativamente a performance, pois para cada registro recuperado por um
select que menciona eles, o Firebird terá que executar os selects
envolvidos no calculo.

IMHO, campos calculados devem ser rápidos. No caso de formulas muito
complexas envolvendo selects em outras tabelas, talvez seja mais
interessante optar por uma procedure selecionavel ao invés de criar os
campos calculados.

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

HO> Bom dia Colegas!

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

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

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

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

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

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

HO> Será uma vantagem ou desvantagem?

HO> [ ]'s,
HO> Hélio Oliveira


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





Mais detalhes sobre a lista de discussão lista