te conviene crear indices para las fechas y empresa, los índices los creas
para agilizar las busquedas, para que el motor haga el ordenamiento segun lo
que estas buscando
-------Mensaje original-------
De: Pablo Braulio
Fecha: 10/17/05 12:33:54
Para: dkuroki(at)dbas(dot)com(dot)ar
CC: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] Ayuda con indices.
El Lunes, 17 de Octubre de 2005 16:06, escribió:
> Pablo,
>
> En principio deberias analizar de crear indices sobre los campos
> implicados en los WHERE de tus consultas.
> Esto seria algo asi, por ej:
>
> SELECT * FROM rev_accesos WHERE campo1=100 AND campo2='descripcion'
>
> Este query puede ser ejecutado mas rapidamente si tenes un indice por
> campo1 y campo2.
> Ahora, si los 128265 registros de la tabla cumplen con la condicion
> (campo1=100 AND campo2='descripcion') no tiene sentido agregar un
> indice porque es preferible "barrer" toda la tabla y no entrar por el
> indice para obtener el mismo resultado.
> De hecho, agregar ese indice seria contraproducente para la performance.
>
> Si envias las consultas que le estas haciendo a la base, la lista te va
> poder ayudar con mas precision. De todas formas,espero que te ayude,
>
> Saludos,
>
>
Hola.
Concretamente. Esta es la estructura de una tabla.
\d rev_accesos;
Tabla «public.rev_accesos»
Columna | Tipo |
Modificadores
-------------------+------------------------+--------------------------------
----------------------------
id | integer | not null default
nextval('public.rev_accesos_id_seq'::text)
empresa | character varying(6) | not null
equipo | character varying(20) |
usuario | character varying(40) | not null
programa | character varying(10) |
tipo_acceso | character varying(80) | not null
fecha | date | not null
hora | time without time zone | not null
fichero_accedido | character varying(200) |
registro_accedido | character varying(200) |
Índices:
«rev_accesos_pkey» PRIMARY KEY, btree (id)
Restricciones de llave foránea:
«$1» FOREIGN KEY (empresa) REFERENCES empresas(nick) ON UPDATE CASCADE
ON
DELETE CASCADE
Las consultas que le hago:
$select= "select id, empresa, equipo, usuario, programa, tipo_acceso, fecha,
hora, fichero_accedido, registro_accedido from rev_accesos where fecha
between '".$fecha_desde."' and '".$fecha_hasta."' and empresa='".
$empresa."';";
Es decir, lo que hago es una consulta filtrando por fechas y demás.
¿dices que para estos casos no es conveniente usar indices?.
Gracias por la ayuda.
El problema (o questión), es que al hacer una consulta a esta tabla, tarda
mucho en ejecutarla. Mucho = 2 minutos (+ o -)
--
Saludos.
Pablo.
Fingerprint 5607 40CF 45EF D490 B794 5056 D7B2 C3DC ABF1 CE49
Jabber: bruli(at)myjabber(dot)com