En una base de datos relacional, un índice es una estructura de datos asociada a uno o varios campos de una tabla que se crea con el propósito de acelerar las consultas sobre dicha tabla.

La analogía del libro

Un índice en una base de datos es muy similar a un índice en la parte posterior de un libro.

Imaginemos un libro de 1000 páginas, dividido en 10 capítulos, con 100 páginas por capítulo.

Si queremos encontrar un concepto en particular dentro de ese libro, sin una página de índice, no tendríamos otra opción que revisar todo el libro, es decir: 1000 páginas.

Pero con una página de índice, sólo necesitaríamos buscar la palabra en el índice (que está ordenado alfabéticamente) y al encontrarla -de manera mucho más eficiente- ir directamente a la/s página/s donde se encuentra.

Es decir, contando con un índice, tendríamos que revisar sólo 1 ó 2 páginas del índice para obtener la información que buscamos… en vez de tener que revisar las 1000 páginas del libro.

Índices implícitos

Los índices implícitos son índices que el servidor de la base de datos crea automáticamente para la PK y las UK de las tablas.

Cuándo usar índices y cuándo no

Los índices pueden mejorar la performance de las consultas, pero también implican ciertos «costos».

Costos de espacio, ya que las tablas creadas para almacenar los índices ocupan espacio en la base de datos.

Y costos de tiempo y recursos, ya que cada vez que se «escribe» (UPDATE, INSERT o DELETE) en una tabla indexada, además de actualizar la propia tabla se tienen que actualizar todas las tablas de índice definidas sobre ella.

En cada caso se tendrá que evaluar costos vs. beneficios para decidir en qué tablas y en qué campos la creación de un índice puede mejorar la performance de la base de datos.

Sin embargo, hay algunas circunstancias frente a las cuales típicamente se suele recomendar o desaconsejar su uso.

Se suele recomendar su uso en:

  • tablas que tienen grandes volúmenes de datos
  • tablas que tienen pocas necesidades de actualización
  • tablas que reciben gran cantidad de consultas (SELECT)
  • campos referenciados frecuentemente desde cláusulas WHERE

Se suele desaconsejar su uso en:

  • tablas con poco datos
  • tablas que tienen operaciones de inserción o modificación grandes y frecuentes
  • campos que contienen muchos valores nulos

Etiquetado en: