[firebase-br] Left Join muito Lento no Firebird 3 como resolvo ?

Gladiston Santana gladiston em vidy.com.br
Seg Ago 1 18:15:33 -03 2016


Indice composto quer dizer uma pesquisa/indice com mais de uma coluna, ex:

select a.ip, a.os, a.hostname, a.port, a.protocol,  b.state from tabela1 a
left join tabela2 b on (a.ip = b.ip and a.port = b.port);

cada uma das tabelas tem seus indices individualmente, daí cabe ao banco de
dados ter a inteligência de usufruir desses indices que embora separados,
quando em ordem ou agrupados será fácil determinar o inicio e o fim de um
bloco que satisfaz a condição sem ter que varrer a tabela inteira.

você vai achar na internet uma explicação ilustrativa muito boa a respeito
de joins que é um circulo à direita, centro e esquerda, todos em
intersecção, daí explica os termos right/left/inner/outer join e como os
dados são selecionados pela query e como os indices irão ser usados. Não
tenho o link, mas acho que qualquer apostila SQL deve tê-la porque é muito
fácil entender desse jeito.

Os indices podem ser expressões também, foi o que você fez na sua query com
o operador ||, mas acho que ela estava errada. Um bom exemplo para usar um
indice com expressão é digamos ordenar um maillist por dominios/root para
simplificar o envio de emails e assim enviar primeiro todos os que forem
.br, depois gmail.com, depois hotmail.com,... em sequencia. Isso turbinará
o envio. Ex:

create index ix_people_email on people  computed by (reverse(email));

Digamos que você queira só os emails cujo root é .br:

select * from people
  where reverse(email) starting with reverse('.br');

Quando você usa um where com uma expressão, é sábio criar um indice
repetindo a mesma expressão para explicitar ao banco de dados que se houver
um indice escrito da mesma forma então deverá usá-lo. Em queries muito
complexas, a forma que se escreve o where nem sempre será igual ao indice e
daí vocÊ complica a vida do banco de dados, em alguns casos a inteligência
dele entende que um indice se encaixa perfeitamente naquela bagunça chamada
query e em outras não, para evitar o erro, alguns programadores escrevem
queries bem formais visando uma sequencia de campos bem determinística.

Só crie indices se o mesmo for muito usado, criar indices demais vai tornar
as inclusões mais lentas e isso pode fazer muita falta em programas que
encadeiam muitas transações por segundo.
tabelas muito pequenas como estados, paises ou coisas do tipo .. não vou
dizer que é perda de tempo criar indices para eles porque o pessoal aqui na
lista vai me expurgar, mas no caso do FB,ele vai preferir ignorar o indice
porque isso será mais rapido do que operacionalizá-los. Criar indice para
relatórios é outra perda de tempo, mas vez ou outra isso será necessário.

Um abraço e boa sorte.


Em 1 de agosto de 2016 16:41, Luciano franca <luapfirebird em yahoo.com.br>
escreveu:

> Sim meu indice é composto mesmo porém eu não sei como fazer para o Left
> Join usar o Indice
> você disse  *Se seu indice é composto, o uso da chave em campos de
> pesquisa (inclui inner/left/outer) também deverá ser composto.*
> poderia me dar um exemplo ?
>
>
> Em Segunda-feira, 1 de Agosto de 2016 15:57, Gladiston Santana <
> gladiston em vidy.com.br> escreveu:
>
>
> Olhando rapidamente seu where me parece que é uma chave composta por dois
> campos, contudo, seu left join é uma expressão que visa concatenar.
> A não ser que tenha escapado algo a minha vista, não há hipótese nenhuma
> de usar um indice aí.
> Se seu indice é composto, o uso da chave em campos de pesquisa (inclui
> inner/left/outer) também deverá ser composto.
>
>
>
>


-- 
--
B em B@BU     iB em M@B.  B em MBBO   MBBMMB em B@BZLr    E@@@@i      r@@@BU
vB em M@O     E em B@Bu   BBBM em 0   G em MMM@N8MBB em ZP5r  B em B@k      8B@@O
 OB em B@q   2 em BBBM    B em B@BO   BB em B@B,.:,7B em B@@L uB em B@,    OB em B@.
 ,@@@B@   @BBB@,    @BBB em 8   M em M@@@     PB em B@B  @@@BN   iB em B@L
  U em B@B2 LB em B@X     B em MBBO   MBBM em B     i em BBB@. 7 em B@Bi  B em B@E
   B@@@BiM em M@B.     @BBM em G   M em MMB@     v@@M em B,  G em B@Z v em B@B.
   7B em B@O em B@B5      B em B@B8   BBBM em B     Z@@@B@   iB@@@2 em B@Br
    NB em M@B em B8       @B em B@8   M em B@B em i:i75 em B@B em r    E@@B em B@Bq
    . em B@@@B@:       B em B@B@   @B@@@B em B@B@@@ME;     .BB em MBB@
     55.ANOS        OMOGBS   PBZGGOOMOO117,        7 em BBB@r
     ==============================================r@@@@F=====
     Gladiston Santana                             8 em B@B,
     Supervisor de TI                             G em B@B7
     Tel.:+551147873122 R:228                    :@B em B0
     Grupo VIDY - SGQ ISO9001 - 55 ANOS          @B em B@.
     Visite nosso site: www·vidy·com·br         BB@@@u
     Visite também : www·expolabor·com·br      GB em B@N



Mais detalhes sobre a lista de discussão lista