Re: Problema de Performance

From: "Raul Andres Duque" <ra_duque(at)yahoo(dot)com(dot)mx>
To: "Gabriel Hermes Colina Zambra" <hermeszambra(at)yahoo(dot)com>, "Yasset Perez Riverol" <yasset(dot)perez(at)biocomp(dot)cigb(dot)edu(dot)cu>, "'postgre sql'" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Problema de Performance
Date: 2008-01-29 13:33:57
Message-ID: 003201c8627b$9b0dc710$5800a8c0@amadeus.net.co
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


----- Original Message -----
From: "Gabriel Hermes Colina Zambra" <hermeszambra(at)yahoo(dot)com>
To: "Yasset Perez Riverol" <yasset(dot)perez(at)biocomp(dot)cigb(dot)edu(dot)cu>; "'postgre
sql'" <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Monday, January 28, 2008 5:57 PM
Subject: Re: [pgsql-es-ayuda] Problema de Performance

>
> --- Yasset Perez Riverol
> <yasset(dot)perez(at)biocomp(dot)cigb(dot)edu(dot)cu> escribió:
>
>> Hola a todos disculpen la demora:
>> Mi problema consistia en el performance de un query
>> utilizando INNER JOIN
>> entre una tabla de 5 millones de compuestos y una
>> tabla de 44 tuplas pasando
>> por una tabla de 9 millones de tuplas.
>>
>> Como me solicitaron el EXPLAIN del query es el
>> siguiente:
>>
>> EXPLAIN select tabla1.id, tabla2.id from tabla1
>> INNER JOIN tabla3 ON
>> (tabla3.id_tabla1 = tabla1.id) INNER JOIN tabla2 ON
>> (tabla2.id =
>> tabla3.id_tabla2);
>>
>> QUERY PLAN
>>
> --------------------------------------------------------------------------------
>> Hash Join (cost=313052.04..527393.28 rows=237964
>> width=96)
>> Hash Cond: ((tabla3.id_tabla1)::text =
>> (tabla1.id)::text)
>> -> Hash Join (cost=1.99..152461.40 rows=237964
>> width=96)
>> Hash Cond: ((tabla3.id_tabla2)::text =
>> (tabla2.shortname)::text)
>> -> Seq Scan on tabla3
>> (cost=0.00..146023.56 rows=1081656 width=96)
>> -> Hash (cost=1.44..1.44 rows=44
>> width=48)
>> -> Seq Scan on tabla2
>> (cost=0.00..1.44 rows=44 width=48)
>> -> Hash (cost=195175.69..195175.69 rows=5412669
>> width=48)
>> -> Seq Scan on tabla1
>> (cost=0.00..195175.69 rows=5412669
>> width=48)tabla3
>> (9 rows)
>>
>>
>>
>>
>> --
>> Ing. Yasset Pérez Riverol.
>> Grupo de Bioinformática.
>> CIGB, La Habana, Cuba.
>>
>> -------------------------
>>
>> "La alegría está en la lucha, en el esfuerzo,
>> en el sufrimiento que supone la lucha y no
>> en la victoria."
>> Mahatma Gandhi
>
> Sabes hace un mes tuve un tema parecido y sustitui el
> inner join
>
> select tabla1.id, tabla2.id from tabla1
> INNER JOIN tabla3 ON
> (tabla3.id_tabla1 = tabla1.id) INNER JOIN tabla2 ON
> (tabla2.id =
> tabla3.id_tabla2);
>
> Por
>
> select tabla1.id, tabla2.id from tabla1,tabla2
> , tabla3
> where
> (tabla3.id_tabla1 = tabla1.id) and
> (tabla2.id =
> tabla3.id_tabla2);
>
> Y la performance mejoro mucho.
>

No se supone que los dos QUERYs son equivalentes??

No se supone que el INNER JOIN es simplemente un artificio para hacer más
legible la consulta ya que separa relaciones de filtros, pero despues de que
es "traducido" se llega a la 2da consulta?

Alguien sabe porque el performance es diferente en esas dos consultas?

Atentamente,

RAUL DUQUE
Bogotá, Colombia

> La frase de Gandhi esta muy linda, muy lirica, pero
> prefiero no descartar por ello la victoria. Ya que
> quiza la misma de felicidad a toda una sociedad, por
> eso te saludo desde Uruguay con otra frase.
>
> "Hasta la victoria siempre"
> Ernesto "Che"
>
> Atte.
> Gabriel Colina
>
>
>
>
>
>
> ____________________________________________________________________________________
> ¡Capacidad ilimitada de almacenamiento en tu correo!
> No te preocupes más por el espacio de tu cuenta con Correo Yahoo!:
> http://correo.espanol.yahoo.com/
> --
> TIP 4: No hagas 'kill -9' a postmaster

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Silvio Quadri 2008-01-29 13:45:06 Re: Se puede obtener el total de registros de una tabla sin select count(*)?
Previous Message mariana chagra 2008-01-29 13:23:00 Conexion Postgis - php/mapscript