Mejorando la performance de PostgreSQL con índices parciales

alfredo publicó esto el 28/09/09 en Bases de Datos. Un comentario

Una característica poco conocida pero muy útil de PostgreSQL es la posibilidad de crear índices parciales, la mayor motivación de estos índices es evitar indexar valores comunes, esto reduce su tamaño lo cual acelerará las búsquedas que usen el índice. También acelerará muchas operaciones de actualización porque el índice no necesita ser actualizado en todos los casos.

Tomemos un ejemplo simplificado de la vida real, supongamos que tenemos una tabla de afiliados de una obra social. En esta tabla tenemos a los titulares y a los familiares de los titulares, los cuales acceden a los mismos servicios que los titulares. Si suponemos que cada titular tiene en promedio 2 o 3 familiares asociados y si nuestras búsquedas se realizan principalmente sobre los titulares, probablemente no necesitemos indexar a los familiares.

Asumimos que tenemos la siguiente tabla:

CREATE TABLE afiliados (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(60),
    tipo_afiliado VARCHAR(20),
    monto_cuota REAL,
    monto_deuda REAL,
    .....
);

Siguiendo con el ejemplo para crear un índice solo para los afiliados titulares, usamos la siguientes sentencia

CREATE INDEX idx_afiliados_titulares
ON afiliados(tipo_afiliado)
WHERE tipo_afiliado = 'Titular';

Una típica consulta que utilizará este índice es:

SELECT nombre FROM afiliados WHERE tipo_afiliado = 'Titular';

Ahora veamos otro ejemplo, si habitualmente consultamos aquellos afiliados que pagan una cuota superior a $50 para brindarle promociones o precios diferenciales podemos crear el siguiente índice parcial:

CREATE INDEX idx_afiliados_buenos_afiliados
ON afiliados(monto_couta)
WHERE monto_couta >= 50;

La siguiente es una consulta que utilizará el índice parcial:

SELECT nombre FROM afiliados WHERE monto_cuota = 55;

Para más información y ejemplos podemos ver la documentación oficial de PostgreSQL.


Un comentario

Trackbacks and Pingbacks


Dejá un comentario

Imagen CAPTCHA CAPTCHA Audio
Refrescar imagen