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

Consideraciones sobre el rendimiento de los índices en 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 a costa de espacio de almacenamiento adicional y gastos de mantenimiento. Son cruciales para optimizar el rendimiento de las consultas, sobre todo en grandes conjuntos de datos.

Utilización

Los índices se utilizan para mejorar el rendimiento de las operaciones de lectura, como las consultas a SELECT, permitiendo un acceso más rápido a los datos. PostgreSQL los utiliza automáticamente al ejecutar las consultas, siempre que sean relevantes para las condiciones de la consulta.

CREATE INDEX index_name
ON table_name (column_name);

En esta sintaxis, CREATE INDEX genera un índice llamado index_name sobre el column_name especificado de table_name, optimizando las operaciones de búsqueda en esa columna.

Ejemplos

1. Creación de índices básicos

CREATE INDEX idx_employee_name
ON employees (last_name);

Este ejemplo crea un índice en la columna last_name de la tabla employees para acelerar las consultas que filtran u ordenan por apellidos.

2. Índice único

CREATE UNIQUE INDEX idx_unique_email
ON users (email);

Aquí, un índice único garantiza que todos los valores de la columna email de la tabla users sean distintos, lo que evita entradas duplicadas y optimiza la eficacia de la búsqueda.

3. Índice multicolumna

CREATE INDEX idx_order_customer_date
ON orders (customer_id, order_date);

Este ejemplo muestra un índice multicolumna en customer_id y order_date, que puede mejorar el rendimiento de las consultas que filtran en ambas columnas, como la recuperación de pedidos de un cliente concreto dentro de un intervalo de fechas.

Tipos de índices

1. Índice parcial

CREATE INDEX idx_active_users
ON users (email)
WHERE active = true;

Los índices parciales pueden utilizarse para indexar un subconjunto de filas de una tabla, lo que puede ser beneficioso para el rendimiento cuando las consultas filtran a menudo en función de condiciones específicas.

2. Índice de Expresión

CREATE INDEX idx_lower_email
ON users (LOWER(email));

Los índices de expresión permiten indexar el resultado de una expresión, lo que resulta útil para búsquedas sin distinción entre mayúsculas y minúsculas o valores de columna calculados.

Consejos y buenas prácticas

  • Evalúa las necesidades de consulta. Crea índices basados en patrones de consulta; indexar cada columna es ineficaz.
  • Controla el uso del índice. Utiliza la vista pg_stat_user_indexes de PostgreSQL para controlar el uso de los índices e identificar los que no se utilizan.
  • Equilibrio entre lecturas y escrituras. Ten en cuenta la compensación entre la mejora del rendimiento de lectura y la sobrecarga de las operaciones de escritura, ya que los índices deben actualizarse con cada inserción, actualización o eliminación.
  • Aprovecha los índices únicos para la integridad. Utiliza índices únicos para aplicar las restricciones de integridad de los datos siempre que sea posible.
  • Mantenimiento regular. Analiza y vacía regularmente las tablas para mantener la eficacia de los índices y evitar que se hinchen.
  • Reconstruir índices fragmentados. Utiliza el comando REINDEX para reconstruir los índices cuando se fragmenten.
  • Evalúa la eficacia del índice. Utiliza el comando EXPLAIN para ver los planes de ejecución de las consultas y evaluar la utilización de los índices.
  • Elige el tipo de índice correcto. Selecciona índices B-tree, GiST o GIN en función de casos de uso y requisitos de consulta específicos.