From: | "Andres Duque" <raulandresduque(at)hotmail(dot)com> |
---|---|
To: | "Cristian Saavedra" <cristian(dot)aquii(at)gmail(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: ayuda con planeador |
Date: | 2007-01-10 20:01:27 |
Message-ID: | BAY135-DAV9AC5752E41DF284F08AA5BAB20@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Cristian ... si algunos de los "catx_id" tienen valor ... los otros
"catx_id" son nulos o vacios ???
Si es así puedes crear un campo (incluso puede actualizarse con un trigger),
que tenga la concatenación de todos los "catx_id" ... de este modod los "or"
desapareceran ...
select * from mitabla where id = x and catnuevo_id=y ;
Atentamente,
RAUL DUQUE
Bogotá, Colombia
----- Original Message -----
From: "Cristian Saavedra" <cristian(dot)aquii(at)gmail(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Wednesday, January 10, 2007 2:53 PM
Subject: [pgsql-es-ayuda] ayuda con planeador
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)
---------------------------(fin del mensaje)---------------------------
TIP 6: ¿Has buscado en los archivos de nuestra lista de correo?
From | Date | Subject | |
---|---|---|---|
Next Message | Fernando Aguada | 2007-01-10 20:05:59 | Re: ERROR DE CONECTIVIDAD:NO SE PUEDE OBTENER INFORMACION ESPECIFICA |
Previous Message | Andres Duque | 2007-01-10 19:55:26 | Re: ERROR DE CONECTIVIDAD:NO SE PUEDE OBTENER INFORMACION ESPECIFICA |