[firebase-br] Função com melhor desempenho: Max ou First 1

Alexandre Pereira Bühler alexandre em simaoebuhler.com.br
Seg Jan 20 15:29:09 -03 2020


Esta é minha tristeza.
Neste modelo de versionamento o count é muito lento
http://www.firebirdfaq.org/faq5/

Em 20/01/2020 10:59, Carlos H. Cantu escreveu:
> Cada SGBD tem suas próprias implementações em relação a como cada
> processo é feito, portanto, nem sempre a teoria válida para um é
> válida para o outro. Tem que entender os "internos" de cada SGBD pra
> saber como ele lida com cada situação.
>
> Nem sempre o order by exige sort. Se existir um índice, o FB irá usar
> o índice sempre que possível para não ter que fazer sort. Mesma coisa
> em relação ao First.
>
> Outro exemplo: o count no FB exigirá que o FB visite cada registro
> para saber se ele está visível para a transação que está fazendo o
> count (devido a arquitetura de versioning).
>
> []s
> Carlos H. Cantu
> eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
>
> D> Olá
>
> D> Olha .. se pensar na teoria .. um order by vai sempre obrigar o SGBD a
> D> utilizar uma algoritmo de ordenação no seu SGBD, o que sempre é uma rotina
> D> mais "lenta" e ainda até onde eu sei, o first, simplesmente não exibe os
> D> outros registros, mas ele tem que saber qual é o primeiro, assim ele
> D> carrega os outros mas não exibe. Já o count, desde que faça em cima somente
> D> somente de um campo, por mais que ele seja indexado, ñão haverá
> D> "movimentação de posição de dados" para exibição.
> D> Assim pensando lá na disciplina de Estrutura de Dados do seu professor
> D> chato, tecnicamente o count deve ser mais rápido. Ahh mais uma coisa.. para
> D> fazer sort deve haver um count para ir ornando.
>
> D> Danilo
>
> D> Em sex., 10 de jan. de 2020 às 16:52, Carlos H. Cantu <
> D> listas em warmboot.com.br> escreveu:
>
>>> Acredito que se você tiver um indice decrescente no campo ID, a
>>> performance será praticamente a mesma. Faz um teste e retorne aqui.
>>>
>>> []s
>>> Carlos H. Cantu
>>> eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
>>> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
>>>
>>> CA> Olá! No meu Select, para se obter o maior ID, qual destas funções seria
>>> CA> mais apropriada e que utilizaria menos recurso de processador/memória?
>>>
>>> CA> select max(M2.ID)...
>>>
>>> CA> select M1.SALDO from CONTAS_MOV M1 where (M1.ID = (select max(M2.ID)
>>> CA> from CONTAS_MOV M2 where (M2.DATA <= current_date) and (M2.ID_EMP = 1)
>>> CA> and (M2.TIPO_MOV = 1)))
>>>
>>> CA> ou
>>>
>>> CA> select first 1 M2.ID...
>>>
>>> CA> select M1.SALDO from CONTAS_MOV M1 where (M1.ID = (select first 1
>>> M2.ID
>>> CA> from CONTAS_MOV M2 where (M2.DATA <= current_date) and (M2.ID_EMP = 1)
>>> CA> and (M2.TIPO_MOV = 1) order by M2.ID desc))
>>>
>>>
>>> CA> Eu tenho em mente que a função max é mais nativa, mas também que ela
>>> CA> pode contar vários registros até retornar o maior. Eu não sei o impacto
>>> CA> que isso causaria numa tabela com milhões de registros.
>>>
>>> CA> Já o first 1 pode retornar de imediato o primeiro registro, só que para
>>> CA> ele funcionar desta forma, eu tenho que utilizar: order by ID desc.
>>> CA> Acredito que assim eu não estarei utilizando o índice do campo por ser
>>> CA> uma PK Ascending.
>
> ______________________________________________
> 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

-- 
Alexandre Pereira Bühler

Simão &  Bühler Ltda (Infobrindes)
http://www.simaoebuhler.com.br
alexandre em simaoebuhler.com.br
Telefone: (41) 3039-5428

Infobrindes (Simão &  Bühler Ltda)
Brindes e material promocional.
http://www.infobrindes.com.br
karin em infobrindes.com.br
Telefone: (41) 3082-8667





Mais detalhes sobre a lista de discussão lista