From: | Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl> |
---|---|
To: | Fernando Romo <pop(at)cofradia(dot)org> |
Cc: | Jaime Casanova <systemguards(at)yahoo(dot)com>, Luz Lopez <viaris(at)hotmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: acelerar la ejecucion de consultas |
Date: | 2004-11-12 19:37:15 |
Message-ID: | 20041112193715.GI10858@surnet.cl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Fri, Nov 12, 2004 at 11:53:15AM -0600, Fernando Romo wrote:
Hola,
(Luz: con respecto a tu pregunta, un comentario al final de este mail).
> Claro que puedes usar indices con funciones declaradas, pero tienen un
> pequeño problema en BD con alta transaccionalidad: tienden a darle
> latencia a las inserciones, y si incluyes varios indices con funciones
> agregadas y tienes que insertar algunos miles de registros por minuto,
> entonces te enfrentaras a otras cosas.
En general no creo que sea buena idea poner demasiados indices en una
tabla. Cada uno tiene un sobrecosto a la hora de insercion no trivial,
que va a aumentar mucho el tiempo de insercion. Pero fuera de eso, no
creo que te vayas a enfrentar a otro problema; quizas a lo que te
refieres es un bug y deberia ser corregido.
En el caso de tu articulo, lo que yo haria seria tener una BD en una
maquina sin ningun indice (salvo las PKs), donde se hagan las
inserciones; y en otra maquina una replica, donde se haran las
consultas, con los indices que necesites (sin exagerar).
Y en ningun caso creo que puedas crear indices en funciones de
agregacion! (y aunque funcionara, dudo que sirvieran de algo)
> En lo personal recomiendo diseñar las BD conlos tipos e indices mas
> planos posibles y un poquito de optimización en los querys pueden ayudar
> mucho más que crear indices con funciones.
Completamente de acuerdo.
Con respecto al tema original: no tengo mucho tiempo para hacer
experimentos en este momento, pero yo intentaria convencer al
optimizador a usar un indice parcial en el año y funcional en el mes,
algo como
CREATE INDEX foo ON tabla (date_part('month', campo_fecha))
WHERE date_part('year', campo_fecha) = '2004';
o algo semejante.
--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"La felicidad no es mañana. La felicidad es ahora"
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2004-11-12 19:39:42 | Re: Problema de Recursos Red Hat Vs Postmaster |
Previous Message | Alvaro Herrera | 2004-11-12 19:30:50 | Re: PG_DUMP |