Ir al contenido principal
Documentos
Funciones de cadenaDesencadenaBases de datosFunciones JSONFunciones matemáticasFunciones de fechaÍndicesSintaxis básicaGestión de Tablas y Esquemas

Índices parciales PostgreSQL

Los índices en PostgreSQL son objetos de base de datos que mejoran la velocidad de las operaciones de recuperación de datos en una tabla. Los índices parciales son un tipo de índice que sólo incluye filas en el índice si cumplen una determinada condición, optimizando el rendimiento y reduciendo el almacenamiento.

Utilización

Los índices parciales se utilizan cuando quieres indexar un subconjunto de filas de una tabla, normalmente las que cumplen criterios específicos, para mejorar el rendimiento de la consulta y minimizar al mismo tiempo el uso de espacio en disco. Se definen añadiendo una cláusula WHERE a la definición del índice.

CREATE INDEX index_name
ON table_name (column_name)
WHERE condition;

En esta sintaxis, la WHERE condition especifica qué filas deben incluirse en el índice.

Ejemplos

1. Índice Parcial Básico

CREATE INDEX active_users_index
ON users (last_login)
WHERE active = true;

Este ejemplo crea un índice parcial en la tabla users para la columna last_login, pero sólo para las filas en las que el campo active sea true.

2. Indexación con condiciones de valor específicas

CREATE INDEX high_priority_orders_index
ON orders (order_date)
WHERE priority = 'high';

Aquí se crea un índice parcial en la tabla orders para la columna order_date, centrándose sólo en los pedidos con un priority de 'high'.

3. Condición Compleja Índice Parcial

CREATE INDEX recent_high_sales_index
ON sales (sale_amount)
WHERE sale_amount > 1000 AND sale_date > CURRENT_DATE - INTERVAL '1 year';

Este ejemplo crea un índice parcial en la tabla sales para la columna sale_amount para las ventas superiores a 1000 $ en el último año, optimizando las consultas para las transacciones recientes de alto valor.

4. Índice parcial con expresiones

CREATE INDEX discounted_products_index
ON products ((price - discount))
WHERE discount > 0;

Este ejemplo demuestra el uso de una expresión en el índice, creando un índice parcial en el price - discount calculado para los productos con descuento.

Consejos y buenas prácticas

  • Dirígete a las consultas frecuentes. Utiliza índices parciales para consultas que accedan con frecuencia a un subconjunto específico de datos para maximizar las ventajas de rendimiento.
  • Controla el uso del índice. Analiza periódicamente el uso de los índices para asegurarte de que siguen siendo beneficiosos, ya que los patrones de datos y los requisitos de consulta pueden cambiar con el tiempo.
  • Minimiza el tamaño del índice. Sé específico en la cláusula WHERE para mantener el tamaño del índice pequeño y eficiente, evitando indexar filas innecesarias.
  • Impacto en el rendimiento de la prueba. Tras crear un índice parcial, comprueba el rendimiento de la consulta para asegurarte de que proporciona las mejoras de velocidad deseadas.
  • Considera las operaciones de escritura. Ten en cuenta que los índices parciales pueden afectar al rendimiento de la escritura debido a la sobrecarga que supone mantener los índices durante las inserciones, actualizaciones y eliminaciones.
  • Utiliza REINDEX. Utiliza regularmente el comando REINDEX para reconstruir los índices parciales y mantener su eficacia, especialmente después de cambios significativos en los datos.
  • Aprovecha EXPLAIN. Utiliza el comando EXPLAIN para saber cómo utilizan las consultas los índices parciales y ajusta tu estrategia de indexación en consecuencia.

Consideraciones sobre el rendimiento y la versión

  • Los índices parciales son especialmente beneficiosos para tablas con grandes volúmenes de datos en las que sólo se consulta con frecuencia un pequeño subconjunto.
  • Mantener índices requiere recursos, así que evalúa el compromiso entre rendimiento de lectura y escritura.
  • Asegúrate de la compatibilidad con tu versión de PostgreSQL, ya que las mejoras en las estrategias de indexación pueden variar de una versión a otra.