[firebase-br] Otimização de View

W O sistemas2000profesional em gmail.com
Sex Set 12 14:34:10 -03 2014


El LEFT JOIN te asegura que se muestren todas las filas de la tabla que
está a la izquierda (LEFT = izquierda, en inglés).

El LEFT JOIN normalmente muestra más resultados que el INNER JOIN, porque
el LEFT JOIN no requiere que haya coincidencia para mostrar las filas de la
tabla de la izquierda.

Cuidado al usar los JOIN. Un JOIN es una multiplicación de las filas de la
primera tabla por las filas de la segunda tabla. Si la primera tabla tiene
5 filas y la segunda tabla tiene 100 filas, el resultado tendrá 500 filas.
Pero si la primera tabla tiene 1.000.000 de filas y la segunda tabla tiene
1.000.000 de filas, el resultado tendrá 1.000.000.000.000 de filas. ¡¡¡UN
BILLÓN DE FILAS!!!  ¡¡¡Cuidado con eso!!!

Por lo tanto, siempre que se usa un JOIN hay que filtrarlo para que la
cantidad de filas mostradas sea el mínimo posible. Ese filtro se pone en la
condición del JOIN (al usar la sub-cláusula ON), y en el WHERE.

Para saber si estamos usando bien o mal el JOIN podemos mirar en los
resultados de la performance las entradas "read" y "fetch". Con "read"
podremos saber cuantas filas fueron leídas de las tablas, con "fetch"
podremos saber cuantas filas fueron extraídas y mostradas. Lo ideal es que
"read" y "fetch" sean iguales, pero normalmente no es así.

Si escribimos algo como:

SELECT
   *
FROM
   CLIENTES
WHERE
   CLI_IDENTI > 980

y nuestra tabla de CLIENTES tiene 1.000 filas tendremos un "read" de 1.000
pero un "fetch" de 20, porque de las 1.000 filas solamente 20 cumplieron la
condición de filtro.

Lo normal es que "read" sea igual o mayor que "fetch", si ese no es el caso
entonces nuestro PLAN es horrible, seguramente está usando NATURAL y SORT
cuando no debería usarlos si nuestro PLAN fuera el correcto. Si "fetch" es
mayor que "read" entonces le estamos obligando al Firebird a crear índices
temporarios, y eso es lento en tablas grandes. Si "fetch" es mucho mayor
que "read" entonces inclusive con tablas pequeñas la consulta será lenta,
porque el Firebird estará trabajando mucho más de lo que debería hacerlo.

Saludos.

Walter.



2014-09-12 9:28 GMT-04:00 Renan Rogowski Pozzo <renanrpozzo em gmail.com>:

> E o fato de usar um LEFT JOIN na ligação, irá influenciar na consulta?
>
> Abraço,
> Renan Rogowski Pozzo
>
> *"Entrega o teu caminho ao Senhor; confia nele, e ele o fará." Salmos 37:5*
>
> Em 12 de setembro de 2014 10:08, W O <sistemas2000profesional em gmail.com>
> escreveu:
>
> > Para saber si una vista usa o no un índice tienes que mirar el PLAN de
> esa
> > vista.
> >
> > NATURAL = no usa un índice
> > SORT = no hay un índice en esa columna pero se la necesita ordenada,
> > entonces se crea un índice temporario
> > INDEX = se está usando el índice cuyo nombre se muestra a continuación
> >
> > Si un índice está compuesto por dos o más columnas, para que ese índice
> sea
> > usado no deben faltar las columnas de la izquierda. Por ejemplo, si el
> > índice está compuesto por las columnas PAIS y CIUDAD, si en el WHERE
> pones
> > PAIS, se usará el índice, si en el WHERE pones PAIS y CIUDAD, se usará el
> > índice, si en el WHERE pones solamente CIUDAD, no se usará el índice.
> >
> > Saludos.
> >
> > Walter.
> >
> >
> > 2014-09-12 8:57 GMT-04:00 Renan Rogowski Pozzo <renanrpozzo em gmail.com>:
> >
> > > Bom dia.
> > > Foi criado uma view em nossa base, com ligação de algumas tabelas.
> > >
> > > Se efetuo um *select* nessa view utilizando o *where* em algum dos
> campos
> > > da tabela principal, que possuem índice, a pesquisa é instantânea.
> Porém
> > se
> > > efetuo um *select* com o *where* em um dos campos das tabelas ligadas à
> > > principal, demora. Esses campos também possuem índice, mas parece que
> > > quando efetuo a consulta na view não estão sendo usados esses índices.
> > >
> > > Alguém tem alguma sugestão? Ou já passou por uma situação semelhante?
> > >
> > > Desde já obrigado.
> > >
> > > Abraço,
> > > Renan Rogowski Pozzo
> > >
> > > *"Entrega o teu caminho ao Senhor; confia nele, e ele o fará." Salmos
> > 37:5*
> > > ______________________________________________
> > > 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
> >
> ______________________________________________
> 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