Re: acelerar la ejecucion de consultas

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"

In response to

Browse pgsql-es-ayuda by date

  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