ayuda con planeador

From: "Cristian Saavedra" <cristian(dot)aquii(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: ayuda con planeador
Date: 2007-01-10 19:53:51
Message-ID: 4bd8ca30701101153n31cdb867ua91f8fa0753e4806@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Saludos lista

Tengan todos primero un feliz año, y un feliz regreso de vacaciones
(para quienes las tuvieron).

Tengo una pregunta, tengo una tabla con varios datos sobre compañias,
esta tabla tiene casi 10'000.000 de registros. Ahora, hay un campo que
es la llave primaria y otros 6 campos que referencian todos a la misma
tabla.

id | cat1_id | cat2_id | cat3_id | cat4_id | cat5_id | varios campos.......
-------------------------------------------------------------------------------------------

ahora, he de hacer una busqueda que cumpla con el siguiente criterio

select * from mitabla where id = x and (cat1_id=y or cat2_id=y or
cat3_id = y or cat4_id=y or cat5_id=y)

Quiero que esta tabla busqueda este muy optimizada, he creado indices
individuales para cada columna, un indice multicolumna de todas las
cat_id y un multicolumna de todas las cat_id y el campo id.

Alguien ve una forma de optimizar mas esta consulta, estaba pensando
en negar la consulta de los cats y convertirla a ands en lugar de ors,
no se me ocurren mas cosas. Anexo a continuacion copia del explain
analyze hecho con el ultimo query, si alguien ve alguna forma de
hacerlo mas rapido no dude en decirmelo.

Agradezco por adelantado.

Cristian Saavedra.

QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=5618.31..5618.38 rows=30 width=1289) (actual
time=173.298..173.568 rows=30 loops=1)
-> Sort (cost=5618.31..5620.83 rows=1009 width=1289) (actual
time=173.290..173.380 rows=30 loops=1)
Sort Key: suc_norm_name_s
-> Bitmap Heap Scan on sucursales_71 (cost=1704.99..5567.96
rows=1009 width=1289) (actual time=154.855..160.820 rows=1030 loops=1)
Recheck Cond: (((suc_cat1_fk_n = 124911) OR
(suc_cat2_fk_n = 124911) OR (suc_cat3_fk_n = 124911) OR (suc_cat4_fk_n
= 124911) OR (suc_cat5_fk_n = 124911)) AND (suc_loc_fk_n = 69566))
-> BitmapAnd (cost=1704.99..1704.99 rows=1010
width=0) (actual time=154.235..154.235 rows=0 loops=1)
-> BitmapOr (cost=96.55..96.55 rows=15871
width=0) (actual time=8.580..8.580 rows=0 loops=1)
-> Bitmap Index Scan on suc_71_cat1_idx
(cost=0.00..24.18 rows=4050 width=0) (actual time=0.021..0.021 rows=0
loops=1)
Index Cond: (suc_cat1_fk_n = 124911)
-> Bitmap Index Scan on suc_71_cat2_idx
(cost=0.00..16.36 rows=2674 width=0) (actual time=0.016..0.016 rows=0
loops=1)
Index Cond: (suc_cat2_fk_n = 124911)
-> Bitmap Index Scan on suc_71_cat3_idx
(cost=0.00..11.04 rows=1726 width=0) (actual time=1.444..1.444
rows=4002 loops=1)
Index Cond: (suc_cat3_fk_n = 124911)
-> Bitmap Index Scan on suc_71_cat4_idx
(cost=0.00..40.01 rows=6860 width=0) (actual time=3.330..3.330
rows=6214 loops=1)
Index Cond: (suc_cat4_fk_n = 124911)
-> Bitmap Index Scan on suc_71_cat5_idx
(cost=0.00..4.97 rows=562 width=0) (actual time=3.747..3.747 rows=5774
loops=1)
Index Cond: (suc_cat5_fk_n = 124911)
-> Bitmap Index Scan on suc_71_loc_fk_index
(cost=0.00..1608.19 rows=282626 width=0) (actual time=133.344..133.344
rows=282907 loops=1)
Index Cond: (suc_loc_fk_n = 69566)
Total runtime: 174.184 ms
(20 rows)

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Andres Duque 2007-01-10 19:55:26 Re: ERROR DE CONECTIVIDAD:NO SE PUEDE OBTENER INFORMACION ESPECIFICA
Previous Message Andres Duque 2007-01-10 19:37:53 Re: ERROR DE CONECTIVIDAD:NO SE PUEDE OBTENER INFORMACION ESPECIFICA