Re: Rendimiento de mi consulta

From: "Jaime Casanova" <systemguards(at)gmail(dot)com>
To: "Rafa Comino" <rafacomino(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Rendimiento de mi consulta
Date: 2007-03-02 05:39:51
Message-ID: c2d9e70e0703012139u18bf587evfe002a4f49db0c6f@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On 2/27/07, Rafa Comino <rafacomino(at)gmail(dot)com> wrote:
> Tengo la siguiente consulta:
> SELECT DISTINCT isbn, CURRENT_TIMESTAMP, 1

cambia el distinct por un GROUP BY suele ser mejor

> FROM librosdisponibilidadtemp
> WHERE proceso = ai_proceso
> AND gen_isbn_pais(isbn) IN (SELECT pais FROM raizpaises)

no entiendo esto, no puedes hacer un join aqui?
algo como

from librosdisponibilidadtemp, raizpaises
WHERE proceso = ai_proceso
AND pais = gen_isbn_pais(isbn)

> AND NOT EXISTS
> ( SELECT isbn
> FROM libros
> WHERE isbn = librosdisponibilidadtemp.isbn)
> AND NOT EXISTS
> ( SELECT isbn
> FROM isbns_a_descubrir
> WHERE isbn = librosdisponibilidadtemp.isbn);
>
> Y el plan de ejecución es el siguiente
> Unique (cost=133558107.45..133558128.13 rows=414 width=21) (actual
> time=790552.899..790553.098 rows=9 loops=1)
> -> Sort (cost=133558107.45..133558112.62 rows=2068 width=21) (actual
> time=790552.882..790552.944 rows=9 loops=1)
> Sort Key: isbn, now(), 1
> -> Index Scan using
> librosdisponibilidadtemp_idx_proceso on
> librosdisponibilidadtemp (cost=1.01..133557993.56 rows=2068 width=21)
> (actual time=5722.607..790552.588 rows=9 loops=1)

esta estimacion esta pesima, espera 2068 filas y solo recibe 9...
ejecutas ANALYZE a menudo? que hace la funcion gen_isbn_pais? puedes
mostrar la definicion de esa funcion?

> Index Cond: (proceso = 28465)
> Filter: ((hashed subplan) AND (NOT (subplan)) AND (NOT
> (subplan)))
> SubPlan
> -> Seq Scan on isbns_a_descubrir (cost=0.00..8067.91
> rows=1 width=21) (actual time=30.044..30.044 rows=1 loops=2025)
> Filter: ((isbn)::bpchar = $1)

no existe un indice en esta tabla que puedas usar?

> -> Index Scan using "libros_idx_ISBN" on libros
> (cost=0.00..5.95 rows=1 width=21) (actual time=12.938..12.938 rows=1
> loops=50512)
> Index Cond: (isbn = $1)
> -> Seq Scan on raizpaises (cost=0.00..1.01 rows=1
> width=10) (actual time=0.764..0.871 rows=1 loops=1)
> Total runtime: 790553.561 ms
>
> La tabla libros tiene 1200000 regs.
> La tabla isbns_a_descubrir tiene 300000 regs.
> La tabla librosdisponibilidadtemp tiene 50000 regs.
>
> alguien me puede explicar por qué
> librosdisponibilidadtemp_idx_proceso es tan lento y las
> otras condiciones han ido tan bien
>
>

--
Atentamente,
Jaime Casanova

"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs and the universe trying
to produce bigger and better idiots.
So far, the universe is winning."
Richard Cook

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Arturo 2007-03-02 06:32:18 Re: PROBLEMA BEGIN COMMIT
Previous Message Jaime Casanova 2007-03-02 05:22:53 Re: Novato en bases de datos...