From: | <dkuroki(at)dbas(dot)com(dot)ar> |
---|---|
To: | "Pablo Braulio" <brulics(at)gmail(dot)com> |
Cc: | "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Ayuda con indices. |
Date: | 2005-10-17 14:44:32 |
Message-ID: | uEY7WTIJ.1129560272.5047510.dkuroki@dbas.com.ar |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Pablo,
En este caso podes crear un indice por fecha y por empresa.
Pero lo importante es que entiendas porqué. Y no que te aconsejemos para
este caso puntual.
Primero deberias hacer un explain de este query, para saber que
estrategia esta usando el optimizador de queries. Luego en base a ese
resultado, decidir si crear o no el indice. La creacion de un indice no
es algo intrascendente porque puede afectar a otras operaciones y esta
en el criterio del DBA si conviene o no crearlo para una consulta
especifica.
Antes que nada corre un vacuum analyze a la tabla.
Saludos,
Dorian Kuroki
www.dbas.com.ar
On 10/17/2005, "Pablo Braulio" <brulics(at)gmail(dot)com> wrote:
>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
From | Date | Subject | |
---|---|---|---|
Next Message | Pablo Braulio | 2005-10-17 15:32:04 | Re: Ayuda con indices. |
Previous Message | Martín Marqués | 2005-10-17 14:37:36 | Re: Ayuda con indices. |