[firebase-br] Tempo diminuindo...
Eduardo Jedliczka
jedyfb em gmail.com
Sáb Ago 8 18:09:43 -03 2009
Kelsie. a procedure foi a mais rápida pois trouxe poucos dados (pouca
conversação entre o servidor e o aplicativo)
se você criar uma UDF (por exemplo valida_cnpj que retorne 0 para
errado e 1 para correto) e reescrever o select para
select cnpj, razao_social from tabela where valida_cnpj(cnpj) = 0
verá um desempenho muito melhor.
é claro que esta validação só é eficiente para "testar" dados já
existentes no banco.
durante o insert, é mais eficiente testar na aplicação, e se isto não
for possível, dá para testar o campo com um Check Constraint.
PS: prefiro falar apenas dos bancos que eu já administrei, e
desconsiderar coisas que não tenho muita base para afirmar (mas sei que
alguns membros do desenvolvimento do FB criaram um banco de 1 TB, porém
não tenho muitos detalhes sobre o funcionamento e estrutura do mesmo).
Resumindo :já trabalhei com bancos com mais de 30 milhões de registros
numa única tabela, e sei bem as vantagens e problemas deste tipo de
tabela... onde alguns deles passaram rapidamente dos 20 gb de tamanho.
abraço
Eduardo
Em Sex, 2009-08-07 às 13:20 -0300, //---- Kelsie.Z.Marshall ----//
escreveu:
> WORK IN PROGRESS
>
> Não é o resultado final.
>
> A idéia é subtituir a comparação por uma função, é dificil falar
> hipoteticamente aqui.
>
> Vamos dar um exemplo concreto que fica mais facil de entender imagine uma
> tabela com 80 milhões de registros com duas colunas
>
> CREATE TABLE "GRANDE_TABELA"
> (
> "CNPJ" VARCHAR(14),
> "RAZAO_SOCIAL" VARCHAR(120)
> );
>
> Pronto um exemplo bem concreto não tem como se perder agora.
>
> A tabela está toda preenchida.
>
> insert into GRANDE_TABELA(CNPJ, RAZAO_SOCIAL) values
> ('00000000000000','Empresa 1');
> insert into GRANDE_TABELA(CNPJ, RAZAO_SOCIAL) values
> ('12243345345000','Empresa 80.000.000');
>
> Agora queo sabr o que é mais rápido fazer a verificação via código dando um
> scan na tabela ou fazendo uma função de verificação de CNPJ.
>
> Pelo por SP é bem mais rápido pelo levantado até agora.
>
> Kelsie
>
> PS: Alguém já ouviu fazerdo bancode dados de 1 TETRA gerenciado pelo
> FIREBIRD? Qual o maior (Em tamanho de bytes) bando de dados que você oviu
> falar gerenciado pelo firebird ?
>
>
>
> "Adriano Ferreira" <aerreira68 em gmail.com>
> wrote in message news:9709D68254734F979C60C97ED187F391 em principal...
> Rapaz, pelo que entendi, vc está comparando cada registro de sua tabela com
> todos os demais registros existentes e repete isso zilhões de vezes. Isso é
> um completo absurdo em qualquer sistema.
>
> Basta colocar uma chave primária única na sua tabela, o que garantirá que
> não existem chaves duplicadas, então esse seu teste se torna inútil.
>
> Se sua tabela já contém dados, então crie uma chave primaria nela que
> surgirão "key violation" em todos os que estiverem duplicados.
>
> _
> Adriano Ferreira
>
> ----- Original Message -----
>
> From: //---- Kelsie.Z.Marshall ----//
> To: lista em firebase.com.br
> Sent: Friday, August 07, 2009 12:33 AM
> Subject: Re: [firebase-br] Tempo diminuindo...
>
>
> Consegui alguma coisa
>
>
> COMMIT WORK;
> SET AUTODDL OFF;
> SET TERM ^ ;
>
> /* Stored procedures */
>
> CREATE PROCEDURE "TEST_ID"
> (
> "IN_IDENT" VARCHAR(20),
> "IN2" VARCHAR(20)
> )
> RETURNS
> (
> "RET" SMALLINT
> )
> AS
> BEGIN EXIT; END ^
>
>
> ALTER PROCEDURE "TEST_ID"
> (
> "IN_IDENT" VARCHAR(20),
> "IN2" VARCHAR(20)
> )
> RETURNS
> (
> "RET" SMALLINT
> )
> AS
> BEGIN
> RET = -1;
> FOR SELECT IDENT FROM BIG_TABLE INTO :IN_IDENT DO
> BEGIN
> IF ( IN_IDENT = IN2 ) THEN
> RET = 1;
> ELSE
> RET = 0;
> SUSPEND;
> END
> END
> ^
>
> SET TERM ; ^
> COMMIT WORK;
> SET AUTODDL ON;
>
> ______________________________________________
> 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://firebase.com.br/pesquisa
>
>
>
> ______________________________________________
> 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://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista