[firebase-br] Leitura lenta de uma tabela

José Mauricio Barbisan Zottis zottissistemas em gmail.com
Quinta Fevereiro 18 15:14:50 -03 2021


a data tem no indice UNIQUE, o FB não usa?

Em qui., 18 de fev. de 2021 às 14:43, Frederico Godoi <
frederico.godoi em gmail.com> escreveu:

> Tem o índice pra Pessoa mas não tem pra coluna de Data, cria e faz um
> teste de performance;
> E tira aquele sub-select e faz um join;
>
>
> On Thu, 18 Feb 2021 at 14:41, José Mauricio Barbisan Zottis <
> zottissistemas em gmail.com> wrote:
>
>> Em qui., 18 de fev. de 2021 às 14:40, José Mauricio Barbisan Zottis <
>> zottissistemas em gmail.com> escreveu:
>>
>>> mas os campos FK já não são índices?
>>>
>>>
>>> Em qui., 18 de fev. de 2021 às 14:20, Frederico Godoi <
>>> frederico.godoi em gmail.com> escreveu:
>>>
>>>> Entendi que não existe índice;
>>>> Cria um índice para cada coluna ( cd_pessoaref , dt_dia )
>>>> Altera esse sub-select do nome da pessoa para um INNER JOIN;
>>>> Faça o teste na ferramenta de banco direta com fetch all e veja o
>>>> tempo;
>>>>
>>>> abs
>>>> Frederico
>>>>
>>>> On Thu, 18 Feb 2021 at 14:05, José Mauricio Barbisan Zottis <
>>>> zottissistemas em gmail.com> wrote:
>>>>
>>>>> Plano
>>>>> PLAN (P INDEX (PK_REF_PESSOAS))
>>>>> PLAN (C INDEX (FK_REF_DIA_PESREF))
>>>>>
>>>>> select c.cd_codigo,
>>>>>        c.cd_mes,
>>>>>        c.cd_empresa,
>>>>>        f_nmempresa(c.cd_empresa) nm_empresa,
>>>>>        c.cd_fornecedor,
>>>>>        f_nmpessoa(c.cd_fornecedor)nm_fornecedor,
>>>>>
>>>>>        c.cd_pessoaref,
>>>>>        (select p.nm_usuario from ref_pessoas p where p.cd_codigo =
>>>>> c.cd_pessoaref)nm_pessoaref,
>>>>>        c.dt_dia,
>>>>>        c.qt_quantidade,
>>>>>        c.vl_unitario,
>>>>>        c.vl_total,
>>>>>        c.vl_fornecedor,
>>>>>        c.vl_totfornec,
>>>>>        c.cd_ccusto,
>>>>>
>>>>>        ------------------
>>>>>        c.dt_cadastro,
>>>>>        c.cd_usuario,
>>>>>        c.cd_editor,
>>>>>        c.dt_atualizacao,
>>>>>        c.hr_atualizacao,
>>>>>        f_nmusuario(c.cd_usuario)ds_usuario,
>>>>>        f_nmusuario(c.cd_editor)ds_editor
>>>>>  from ref_dia c
>>>>> where c.cd_pessoaref = :varCdPessoaRef
>>>>>   and c.dt_dia       = :varDia
>>>>>
>>>>>
>>>>> Em qui., 18 de fev. de 2021 às 12:23, Frederico Godoi via lista <
>>>>> lista em firebase.com.br> escreveu:
>>>>>
>>>>>> Coloca o SQL e o plano que a gente pode ajudar melhor;
>>>>>>
>>>>>> On Thu, 18 Feb 2021 at 09:56, José Mauricio Barbisan Zottis via lista
>>>>>> <
>>>>>> lista em firebase.com.br> wrote:
>>>>>>
>>>>>> > Pessoal, bom dia.
>>>>>> >
>>>>>> > tenho um controle de refeições que é feito dentro de um determinado
>>>>>> > período.
>>>>>> > Faço um loop na tabela de usuários das refeições e verifico se ele é
>>>>>> > fixo(come todos os dias) ou variável(de vez em quando).
>>>>>> > carrego tudo em um StringGrig
>>>>>> > o Que acontece é que a tabela de Dias, para cada usuário dentro do
>>>>>> período
>>>>>> > é de no máximo 21 dias, e para montar a grade está levando muito
>>>>>> tempo.
>>>>>> >
>>>>>> > para cada usuário leva 5 segundos para ler os 21 dias, isso é
>>>>>> normal?
>>>>>> >
>>>>>> > Alguém teria uma Dica? Desde já agradeço.
>>>>>> > Uso o FB 3.0/Delphi 10.4(Sidney) e Firedac
>>>>>> >
>>>>>> > a tabela, acredito que está modelada de acordo.
>>>>>> > CREATE GENERATOR GEN_REF_DIA_ID;
>>>>>> >
>>>>>> > CREATE TABLE REF_DIA (
>>>>>> >     CD_CODIGO       PK NOT NULL /* PK = INTEGER NOT NULL */,
>>>>>> >     CD_EMPRESA      PK /* PK = INTEGER NOT NULL */,
>>>>>> >     CD_MES          PK /* PK = INTEGER NOT NULL */,
>>>>>> >     CD_FORNECEDOR   PK /* PK = INTEGER NOT NULL */,
>>>>>> >     CD_PESSOAREF    PK /* PK = INTEGER NOT NULL */,
>>>>>> >     DT_DIA          DATAS /* DATAS = DATE NOT NULL */,
>>>>>> >     QT_QUANTIDADE   QUANTIA /* QUANTIA = DOUBLE PRECISION NOT NULL
>>>>>> CHECK
>>>>>> > (VALUE >= 0.00) */,
>>>>>> >     VL_UNITARIO     MOEDA NOT NULL /* MOEDA = NUMERIC(18,2) DEFAULT
>>>>>> 0 */,
>>>>>> >     VL_TOTAL        NUMERIC(18,4) COMPUTED BY
>>>>>> > ((CAST(coalesce(QT_QUANTIDADE,0)  * coalesce(VL_UNITARIO,0) AS
>>>>>> > NUMERIC(18,4) ))),
>>>>>> >     VL_FORNECEDOR   MOEDA NOT NULL /* MOEDA = NUMERIC(18,2) DEFAULT
>>>>>> 0 */,
>>>>>> >     VL_TOTFORNEC    NUMERIC(18,4) COMPUTED BY
>>>>>> > (((CAST(coalesce(QT_QUANTIDADE,0)  * coalesce(VL_FORNECEDOR,0) AS
>>>>>> > NUMERIC(18,4) )))),
>>>>>> >     CD_CCUSTO       PK /* PK = INTEGER NOT NULL */,
>>>>>> >     DT_CADASTRO     DATAS /* DATAS = DATE NOT NULL */,
>>>>>> >     CD_USUARIO      PK /* PK = INTEGER NOT NULL */,
>>>>>> >     CD_EDITOR       PK /* PK = INTEGER NOT NULL */,
>>>>>> >     DT_ATUALIZACAO  DATAS /* DATAS = DATE NOT NULL */,
>>>>>> >     HR_ATUALIZACAO  TEMPO /* TEMPO = TIME NOT NULL */
>>>>>> > );
>>>>>> >
>>>>>> > /****                          Unique constraints
>>>>>> >  ****/
>>>>>> > ALTER TABLE REF_DIA ADD CONSTRAINT UNQ_REF_DIA UNIQUE (CD_EMPRESA,
>>>>>> > CD_FORNECEDOR, CD_PESSOAREF, DT_DIA);
>>>>>> >
>>>>>> >
>>>>>> > /****                             Primary keys
>>>>>> > ****/
>>>>>> > ALTER TABLE REF_DIA ADD CONSTRAINT PK_REF_DIA PRIMARY KEY
>>>>>> (CD_CODIGO);
>>>>>> >
>>>>>> > /****                             Foreign keys
>>>>>> > ****/
>>>>>> > ALTER TABLE REF_DIA ADD CONSTRAINT FK_REF_DIA_CC FOREIGN KEY
>>>>>> (CD_CCUSTO)
>>>>>> > REFERENCES ADM_CCUSTOS (CD_CUSTO) ON UPDATE CASCADE;
>>>>>> > ALTER TABLE REF_DIA ADD CONSTRAINT FK_REF_DIA_EDT FOREIGN KEY
>>>>>> (CD_EDITOR)
>>>>>> > REFERENCES ADM_USUARIO (CD_USUARIO) ON UPDATE CASCADE;
>>>>>> > ALTER TABLE REF_DIA ADD CONSTRAINT FK_REF_DIA_EMP FOREIGN KEY
>>>>>> (CD_EMPRESA)
>>>>>> > REFERENCES GER_EMPRESA (CD_EMPRESA) ON UPDATE CASCADE;
>>>>>> > ALTER TABLE REF_DIA ADD CONSTRAINT FK_REF_DIA_MES FOREIGN KEY
>>>>>> (CD_MES)
>>>>>> > REFERENCES REF_MES (CD_CODIGO) ON DELETE CASCADE ON UPDATE CASCADE;
>>>>>> > ALTER TABLE REF_DIA ADD CONSTRAINT FK_REF_DIA_PES FOREIGN KEY
>>>>>> > (CD_FORNECEDOR) REFERENCES PES_PESSOA (CD_PESSOA) ON UPDATE CASCADE;
>>>>>> > ALTER TABLE REF_DIA ADD CONSTRAINT FK_REF_DIA_PESREF FOREIGN KEY
>>>>>> > (CD_PESSOAREF) REFERENCES REF_PESSOAS (CD_CODIGO) ON UPDATE CASCADE;
>>>>>> > ALTER TABLE REF_DIA ADD CONSTRAINT FK_REF_DIA_USU FOREIGN KEY
>>>>>> (CD_USUARIO)
>>>>>> > REFERENCES ADM_USUARIO (CD_USUARIO) ON UPDATE CASCADE;
>>>>>> >
>>>>>> > --
>>>>>> > ______________________________________________
>>>>>> > 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://www.firebase.com.br/pesquisa_lista.html
>>>>>> >
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Frederico Godoi
>>>>>> ______________________________________________
>>>>>> 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://www.firebase.com.br/pesquisa_lista.html
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>>
>>>>
>>>> --
>>>> Frederico Godoi
>>>>
>>>
>>>
>>> --
>>>
>>>
>>
>> --
>>
>>
>
> --
> Frederico Godoi
>


--


Mais detalhes sobre a lista de discussão lista