Re: Ayuda con indices

From: Jaime Casanova <systemguards(at)gmail(dot)com>
To: roger gue <rockobop(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Ayuda con indices
Date: 2005-05-24 16:56:00
Message-ID: c2d9e70e05052409561cbddbe2@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On 5/24/05, roger gue <rockobop(at)gmail(dot)com> wrote:
> Hola atodos por lo q lei los indeces ayudan a optimizar la DB o algo
> por el estilo con funciones pero aun no se como implementarlos, si
> alguien me pudiese pasar un ejemplo pequeño de indices con funciones y
> decirme q es loq hace o darme la dir de algun tutorial se los
> agradeceria mucho, soy nuevo en esto de Postgresql
> gracias
> adios
>
Creo entender que quieres crear indices sobre funciones y no sobre
campos de una tabla, es eso?

Traduccion libre del manual (asteriscos mios):

11.5. Indices sobre Expresiones

Un indice no necesita ser creado sobre un campo de la tabla, se pueden
crear indices sobre funciomes o expresiones calculadas a partir de una
o varias columnas de la tabla. Esta caracteristica es util para
obtener calculos rapidos sobre campos de la tabla.

Por ejemplo, una manera comun de hacer comparaciones sin tomar en
cuenta si son mayusculas o minusculas es usar la funcion lower:

SELECT * FROM test1 WHERE lower(col1) = 'value';

Esta consulta puede usar un indice, si alguno a sido definido sobre el
resultado de lower(col1):

CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));

Como otro ejemplo tenemos:

SELECT * FROM people WHERE (first_name || ' ' || last_name) = 'John Smith';

podria ser util crear un indice si esta clausula WHERE es muy
frecuentemente utilizada:

CREATE INDEX people_names ON people ((first_name || ' ' || last_name));

[ ... ]

Indices sobre expresiones o funciones son relativamente costosas de
mantener porque la expresion debe ser calculada para cada fila que se
este insertando o actualizando. Por lo tanto, deben ser usados
unicamente cuando la consulta que puede usar el indice es *muy*
frecuente.

Ademas, IIRC. solo obtienes ventaja de crear un indice sobre una
funcion si la funcion fue declarada como IMMUTABLE (o es que solo
puedes crear el indice si la funcion es IMMUTABLE)?

Basicamente, IMMUTABLE, significa que siempre que des los mismos
valores de entrada la funcion devolvera los mismos resultados.

--
Atentamente,
Jaime Casanova
(DBA: DataBase Aniquilator ;)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message roger gue 2005-05-24 16:58:32 Re: Ayuda con indices
Previous Message Alicia Mc Millan Barrera 2005-05-24 16:31:15 Re: Ayuda con indices