[firebase-br] Uso de Indices

Marcos R. Weimer marcosweimer em gmail.com
Qua Nov 22 07:57:11 -03 2017


Ola!

Por que está fazendo join no "NOTAFISCAL" ? Quais dados do cabeçalho você
precisa nos itens ?

Pergunto por que aqui usamos 2 querys, uma para o cabeçalho e outra para os
itens, é rapido, temos clientes mais de 1.4 milhoes de notas emitidas, mais
de 3 milhões de itens e não demora 6 segundos...

por exemplo (neste banco com mais de 1.4 milhões de notas, servidor é um i7
2.8 8gb mas tem bastante coisa rodando nele, não é exclusivo para o banco
pq é um servidor de testes):

No cabeçalho

Prepare time = 32ms
Execute time = 15ms
Avg fetch time = 15,00 ms

nos itens: (neste caso especifico foram 6 itens)

Prepare time = 31ms
Execute time = 31ms
Avg fetch time = 7,75 ms


se juntar os 2 no mesmo (com left como vc fez)

Prepare time = 46ms
Execute time = 46ms
Avg fetch time = 12,00 ms

O que pode estar influenciando é o where, veja o seu "WHERE
N.NUMNOTA=30000" neste caso deve usar o da tabela principal, já que o mesmo
campo está disponivel nela, e não a do join, assim o indice é otimizado.

Bom, ai estão meus 2 cents de contribuição, deixa o pessoal mais experiente
falar sobre o assunto.


-=Ma®©oS=-
Marcos R. Weimer
Delphi / C# / ASP.NET / PHP / WebServices / Firebird
http://eudoparana.blogspot.com.br/


Em 21 de novembro de 2017 18:17, Rodrigo <firebase em dominioinf.com.br>
escreveu:

> Boa tarde a todos,
>
> Estou com um clientes que tem emissao de nota fiscal e na tabela
> notafiscal ja possui 40.000 notas
> e na tabela detailfiscal mais de 100.000 registros, pelo que ouço falar
> não é muito pois muitos falam
> em milhoes de registros e funciona bem rapido.
>
> Porem tenho encontrado alguma lentidão no meu caso, fiz uns testes para
> ver a questão dos indices:
>
> Teste 1  -- utilizou a index foi rapido
>
> SELECT D.* FROM DETAILFISCAL D
> LEFT JOIN NOTAFISCAL N ON (D.CODSEQ=N.SEQUENCIAL)
> WHERE D.CODIGO=3000
>
> PLAN JOIN (D INDEX (PK_DETAILFISCAL), N INDEX (PK_NOTAFISCAL))
>
> Prepare: 0 ms  Execute: 188 ms  Fetch: 0 ms
>
> Teste 2 -- Não foi tão rapido - Não usou index
>
> SELECT D.* FROM DETAILFISCAL D
> LEFT JOIN NOTAFISCAL N ON (D.CODSEQ=N.SEQUENCIAL)
> WHERE N.NUMNOTA=30000
>
>
> PLAN JOIN (D NATURAL, N INDEX (PK_NOTAFISCAL))
>
> Prepare: 0 ms  Execute: 686 ms  Fetch: 514 ms
>
> Teste 3 -- Não foi tão rapido - Não usou index
>
> SELECT D.* FROM DETAILFISCAL D
> LEFT JOIN NOTAFISCAL N ON (D.CODSEQ=N.SEQUENCIAL)
> WHERE N.NUMNOTA STARTING WITH 3000
>
> PLAN JOIN (D NATURAL, N INDEX (PK_NOTAFISCAL))
>
> Prepare: 0 ms  Execute: 702 ms  Fetch: 530 ms
>
> Essas são selects simples, porem em algumas mais complexas, pode gerar 4 a
> 6 segundos de espera.
>
> Ja fiz backup e restore no banco mas continua lento.
>
> O que posso fazer para estar melhorando a performance?
>
> Grato
>
>
> ---
> Este email foi escaneado pelo Avast antivírus.
> https://www.avast.com/antivirus
>
>
> ______________________________________________
> 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/pes
> quisa_lista.html
>



Mais detalhes sobre a lista de discussão lista