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