Re: Ayuda con indices.

From: Pablo Braulio <brulics(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: dkuroki(at)dbas(dot)com(dot)ar, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Ayuda con indices.
Date: 2005-10-18 07:48:46
Message-ID: 200510180949.11015.brulics@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola.

> Por favor muestra el EXPLAIN ANALYZE de la consulta. No creo que sea
> muy complicado, si no tienes ningun indice, porque ademas estas usando
> una sola tabla. Pero crea el indice en el campo empresa y nos dices si
> lo usa o no.
>

aldiges=# CREATE INDEX rev_acc_empresa ON rev_accesos (empresa);
CREATE INDEX
aldiges=# \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)
«rev_acc_empresa» btree (empresa)
Restricciones de llave foránea:
«$1» FOREIGN KEY (empresa) REFERENCES empresas(nick) ON UPDATE CASCADE ON
DELETE CASCADE
aldiges=# EXPLAIN ANALYZE select id, empresa, equipo, usuario, programa,
tipo_acceso, fecha, hora, fichero_accedido, registro_accedido from
rev_accesos where fecha between '2005-09-01' and '2005-09-30' and
empresa='rlp';
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------
Index Scan using rev_acc_empresa on rev_accesos (cost=0.00..3.40 rows=1
width=159) (actual time=316.647..316.647 rows=0 loops=1)
Index Cond: ((empresa)::text = 'rlp'::text)
Filter: ((fecha >= '2005-09-01'::date) AND (fecha <= '2005-09-30'::date))
Total runtime: 316.734 ms
(4 filas)

> En versiones 8.0 y anteriores, Postgres puede hacer un solo recorrido
> para una tabla (es decir, puede hacer un seqscan, o bien un indexscan
> usando un solo indice). En 8.1 es capaz de usar mas de un indice y
> mezclarlos, con lo que la busqueda podria ser mucho mas eficiente. Si
> estuvieras en 8.1 te diria que ademas del indice por el campo empresa,
> crearas un indice en el campo fecha, que permitiera contestar la
> calificacion del BETWEEN de una manera mas optima. (O quizas estoy
> equivocado en esto ultimo ... es algo tarde aca ...)
>
> Pero si no estas en 8.1 no hay mucho mas que puedas hacer ...

Estoy usando postgresql 8.0.
Gracias por la ayuda.
--
Saludos.
Pablo.

Fingerprint 5607 40CF 45EF D490 B794 5056 D7B2 C3DC ABF1 CE49
Jabber: bruli(at)myjabber(dot)net

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2005-10-18 12:02:41 Re: Ayuda con indices.
Previous Message Leo Gamez CCD Desarrollo 2005-10-18 07:35:16 RE: ayuda pg_dump