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
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 |